본문 바로가기

WEB

[WEB] HTTP 메시지

728x90
반응형

 

 

 

개발자 도구의 네트워크 창에서 서버로부터 다운 받은 파일을 눌러 보면 아래와 같이 Headers 탭에 적혀 있는 것을 본 적 있을 것이다. 이는 클라이언트와 서버 간에 HTTP 메시지를 통해 통신한 이력이라고 이해할 수 있다.

 

 

Request Headers는 클라이언트가 서버에 보내는 HTTP 메시지 이력이며, Response Headers는 서버가 클라이언트에 응답하는 HTTP 메시지 이력이다.

 

 

 

 

HTTP 메시지 구조

 

HTTP 메시지는 기본적으로 위에서부터 차례대로 시작 라인(Start Line), 헤더(Header), 공백 라인(Empty Line 또는 Blank Line), 바디(Message Body)로 구성되어 있다. 이중 공백 라인의 경우 HTTP 메시지 값 구분을 하기 위한 라인이므로 단순히 보기 편하게 넣는 것을 넘어서 반드시 있어야 한다. 만약 보낼 메시지 바디가 없다면 공백만 넣고 끝내면 된다. 또한 HTTP 요청 종류에 따라 Message Body가 포함될 수도 있고 아닐 수도 있다.

 

전체적인 골자는 위와 같고 HTTP 요청(Request)이냐 응답(Response)이냐에 따라 안의 내용물이 약간 달라진다.

 

 

 

 

HTTP Request Message

 

1. 시작 라인(Start Line)
Method: GET / POST / PUT / DELETE 등(HTTP Method)
URL: 요청 대상 경로 표시
Version: 사용된 http 버전

 

2. 헤더(Header)
Headers: HTTP 전송에 필요한 모든 부가 정보를 담음(메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등)

 

3. 공백 라인(Empty)
  : Header와 Body를 구분하기 위한 라인

 

4. 바디(Message Body)
Message Body: 실제 전송할 데이터(HTML 문서, 이미지, 영상, JSON 등)

 

 

 

 

HTTP Response Message

 

1. 시작 라인(Start Line)
Version: 사용된 http 버전
Status Code: 클라이언트가 보낸 요청이 성공인지 실패인지 숫자 코드로 나타냄(ex. 200, 404, 500, 505 ...)
Status Message: Status Code에 대한 결과를 사람이 이해할 수 있는 글로 표현

 

2. 헤더(Header)
Headers: HTTP 전송에 필요한 모든 부가 정보를 담음(메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 등)

 

3. 공백 라인(Empty)
  : Header와 Body를 구분하기 위한 라인

 

4. 바디(Message Body)
Message Body: 응답 받은 데이터

 

 

 

cf) 이러한 HTTP 메시지의 구조는 아래와 같이 구분하기도 한다.

요청 메시지와 응답 메시지의 구조는 첫 줄을 빼고는 구조가 똑같다.

 

 

 

 

Header & Body

 

Header는 General Header, Request Header, Response Header, Entity Header로 나뉜다.

  • General Header: 요청과 응답에서 모두 공통으로 들어가는 Header를 의미한다. 주요 정보들로는 Date(HTTP 메시지 생성 시간), Connection(서버와 클라이언트의 연결 옵션), Via(메시지가 어느 중개자를 거쳐서 왔는지), Transfer-Encoding(메시지에 적용된 인코딩 값) 등이 있다.
  • Request Header: 요청 시에만 있는 Header. 주요 정보들로는 Host(서버의 호스트명과 포트), User-Agent(브라우저 및 기기 버전 등 요청자에 관한 정보), Referer(요청을 보낸 URL), Accept(클라이언트가 받을 수 있는 미디어 타입), Accept-Encoding(클라이언트가 받을 수 있는 인코딩), Authorization(서버 인증을 위한 정보) 등이 있다.
  • Response Header: 응답 시에만 있는 Header. 주요 정보들로는 Server(서버 애플리케이션 이름과 버전), Age(응답이 캐시된 시점부터 얼마나 오래되었는지), Set-Cookie(서버에서 클라이언트에 설정한 쿠키 정보), Allow(서버 측에서 요청 가능한 HTTP 요청 방식) 등이 있다.
  • Entity Header: HTTP 메시지의 Body(본문)에 관한 정보가 있는 Header. 주요 정보들로는 Content-Encoding(본문에 적용된 인코딩), Content-Length(본문의 크기), Content-Type(본문의 응답이 어떤 타입인지), Content-Location(본문이 실제 존재하는 위치), Expires(본문이 캐시되어 유효한 시간), Last-Modified(본문이 마지막으로 갱신된 시간), ETag(본문의 고유 태그, 본문이 수정되면 태그 갱신됨) 등이 있다.

 

Body는 요청 시 전달하는 데이터 내용, 응답 시 받는 데이터 내용으로 HTTP의 문서 마지막에 위치한다. Body는 요청과 응답에 따라 있을 수도 없을 수도 있으며 Body가 없으면 Entity Header도 없다.

 

 

 

 

 

728x90
반응형

'WEB' 카테고리의 다른 글

[WEB] URL과 URI와 URN  (2) 2024.10.24
[WEB] HTTP 상태 코드  (3) 2024.10.17
[WEB] HTTP의 Connectionless  (1) 2024.10.14
[WEB] HTTP의 Stateful과 Stateless  (0) 2024.10.11
[WEB] 웹 접근성(Web Accessibility)  (0) 2024.10.07