Web

HTTP 프로토콜 정리

개발정리 2021. 8. 28. 22:47

ㄴ 웹의 구성요소들이 서로 대화를 할 때 사용되는 프로토콜

 

HTTP (Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.

(프로토콜은 통신규약, 규칙정도로 생각하자) 

 

HTML, CSS, JS, Image와 같은 파일들을 서로 주고받으려면 서버와 클라이언트가 서로 알아볼 수 있는 약속된 메세지가 필요한데, 그 메세지를 HTTP 라 하고, HTTP는 Request와 Reponse를 위한 메세지로 구분되어 있다. 

 

간단하게 HTTP 특징을 보면

  • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석된다.
  • TCP/IP를 이용하는 응용 프로토콜(application protocol) 이다.
  • 무상태성
    (상태를 기억하기 위해 Cookie와 Seesion 등장)
  • 비연결성
    (HTTP는 연결상태를 유지하지 않기 때문에 요청/응답 방식으로 동작)

 

 

HTTP Request Message 예시


개발자 모드 > 네트워크 탭을 통해 확인할 수 있는 Request Message
Http Request Header Format

 

Request Line 영역 

GET /1.html HTTP/1.1

 ㄴ HTTP Method(어떤방식으로 통신할 지), 파일이름(요청하는 정보), HTTP Version을 나타낸다.

 

Request Headers 영역

  • Host : localhost:8080

ㄴ 인터넷에 연결되어 있는 컴퓨터 한대 한대를 식별하는 것이 host 이다. 웹서버의 주소를 나타낸다.

ㄴ 하나의 웹서버가 여러개의 도멘인을 서비스 할 수 있다. a라는 웹서버가 a.com b.com c.com 이라는 도메인을 호스팅하고 있고 각각의 주소별로 다른 웹서버는 host 에 적혀있는 주소가 무엇이냐에 따라서 다른 정보를 보내줄 수 있다. 이를 가상호스트라 한다. 

ㄴ 한대의 컴퓨터에는 여러대의 서버가 설치되어 있을 수 있다. 8080이라는 포트번호에 등록되어 있는 웹서버를 이야기 하는것이다. 

 

  • UserAgent 

ㄴ 웹브라우저의 다른표현이다. 어떤 웹브라이저인지, 운영체제가 무엇인지, OS 버전등을 확인 할 수 있다.

 

  • Accept-Encoding : gzip, deflate, br

ㄴ 웹브라우저 웹서버가 통신할때 응답하는 데이터 양이 많을때 이를 압축해서 전송하면 웹 브라우저가 압출을 풀어서 처리할 수 있어 네트워크 자원을 아낄 수 있다.

ㄴ 이 때 웹 브라우저는 어떤 압축방식을 지원하는지 표시되는 영역이다. 

 

  • If-Modified-Since : Tue, 17 Jul 2021 23:23:26 GMT

ㄴ 요청한 데이터에 대해서 다시 요청을 할때 요청할때마다 다운로드하는것은 비효율적이다. 

ㄴ 이 정보를 서버에 전송한다는 것은 내가 갖고 있는 파일은 마지막으로 언제 다운받았는지를 웹서버에게 알려주는것이고 웹 서버는 가지고 있는 파일이랑 어느것이 더 최신인지를 비교해서 전송여부를 결정한다.

 

Reqeust Message Header 영역

ㄴ Request Line + Request Headers 영역

 

Reqeust Message Body

ㄴ서버 쪽으로 전송해야되는 정보가 있다면 Reqeust Message Body 에 담는데 Header 와 Body  사이에는 Blank line 을 두어서 구분한다고 약속되어 있다. 

 

 

 

HTTP Response Message 예시


개발자 모드 > 네트워크 탭을 통해 확인할 수 있는 Response Message
http response header format

Status 영역 

  •  HTTP/1.1 200 OK

ㄴ 첫번째 행에는 Staus 정보가 노출된다. 

ㄴ http 버전 정보, 응답 결과에 대한 코드, 응답결과를 사람이 이해하기 쉽도록 설명한 영역 

 

  • [참고] 응답 상태코드

    2xx 성공
    3xx 리다이렉션 ( 내가 처리할건 아닌데 다른데로 잘 넘겼을 때 (다른데로 넘겼을 때)) 
    4xx 요청 오류 ( 너 잘못된거 요청했어, 너가 말한게 틀렸어, 그거 아니야 없거나 잘못됬어 )
    5xx 응답 오류 (나한테 무언가 문제가 있어 미안해 서버에 문제있어)

Headers 영역 

  • Content-type: text/html 

ㄴ 웹서버가 응답할 때 이 응답은 어떤 타입인지 웹브라우저에게 전달하고, 웹 브라우저는 타입에 맞게 해석하여 화면에 노출한다. 

ㄴ 이미지일 경우에는 Content-type: image/jpeg

 

  • Content-Length: 1434 

ㄴ 응답하는 컨텐츠의 전체 크기(사이즈) 를 가르키며 단위는 byte 이다. 

 

  • Content-Encoding: gzip 

ㄴ 컨텐츠가 어떤 압축방식을 사용하였는지를 나타내며 클라이언트는 해당 방식으로 압출을 풀어서 읽어야한다. 

 

  • Last-Modified: Tue, 17 Jul 2021 23:23:26 GMT

ㄴ 해당 정보가 마지막으로 언제 수정되었는지를 표시한다. 

 

Body 영역

ㄴ Blank line 을 두어서 헤더와 구분되며, 응답 데이터를 담는다.

 

 

 

결론 


왼쪽- 클라이언트 요청 메세지, 오른쪽 서버 응답 메세지

이와 같이 웹 브라우저와 웹 서버가 커뮤니케이션 하는 것을 직접 텍스트로 만들어보면, 웹 브라우저는 요청을 하기전 위와 같은 요청 메세지를 생성하고, 웹 서버는 요청 메시지를 해석해서 응답 메세지를 만들어 준다. 

응답 메세지를 받은 웹 브라우저는 응답 메세지를 참조하여 화면에 표시해준다. 

 

조금 쉽게 정리하자면, 웹 브라우저 역할은 사용자가 요청한 정보를 요청 메세지로 만들어 웹 서버에게 대신 물어봐주고 웹 서버는 응답 메세지를 만들어준다. 웹 브라우저는 응답 메세지를 보고 화면에 그려주는 것이다. 

 

 

Script


Http 는 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 

데이터 혹은 파일들을 서로 주고 받으려면 서버와 클라이언트가 서로 알아볼수 있는 약속된 메세지가 필요한데 그 메세지를 HTTP 라 하고, 이는 요청 메세지와 응답메세지로 구분되어 있다. 

 

요청 메세지는 

Request Message Header 영역과 Request Message Body 영역으로 구분되어있다. 

이 둘은 Blank line을 두어서 구분되고 있다.

Request Message Header 영역은 Request Line 영역 과 Request Header 영역으로 구분되는데, 

Request Line 영역에는 Http 메서드, 요청 데이터 정보, http 버전을 표시하고 있고, 

Request Header 영역에는 host, user-agent, accept-encoding, if-modified-since 와 같은 정보가 들어있다. 

 

서버쪽으로 전송해야되는 정보가 있다면 Request Message Body 에 담아 전송하면 된다.

 

다음 응답 메세지는

첫번째 줄에는 Staus 영역이 표시되고 http 버전정보, 응답결과에 대한 코드와 이를 설명한 정보가 들어있다. 

그 이후에는 Header 영역인데 content-type, content-length, content-encoding, last-modified 등의 정보로 구성되어 있고 Blank Line 을 기준으로 Body 영역도 존재한다. 

 

 

 

참고자료


https://opentutorials.org/course/3385

https://victorydntmd.tistory.com/286

 

 

 

추천도서


http 완벽가이드

'Web' 카테고리의 다른 글

Thread Pool (Java, Tomcat, SpringBoot)  (0) 2024.07.25
XML & JSON & YAML  (0) 2021.10.30
[DB] Connection Pool 정리  (1) 2021.09.11
쿠키(Cookie)와 세션(Session) 정리  (0) 2021.09.04