프로그래밍/Network

HTTP Request/Response의 메세지 구조 뜯어보기

Lou Park 2022. 2. 12. 23:57

HTTP 메세지

HTTP 메세지는 서버와 클라이언트 간 데이터가 교환되는 방식이다. 메세지 타입은 Request와 Response가 있다. HTTP 메세지는 ASCII로 인코딩된 텍스트 정보이며 여러 줄로 되어있다. HTTP/2에와서는 최적화와 성능 향상을 위해 HTTP 프레임으로 나누어지게되었다.

 

Request

Request는 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔하는 메세지이며, 다음 요소들로 구성된다.

 

 

  • Method: GET/POST/PUT/DELETE/OPTIONS/HEAD 등 클라이언트가 수행하고자 하는 동작이다. 
  • Path: 가져오려는 리소스의 경로다. 프로토콜, 도메인, TCP 포트를 제거한 리소스의 URL이다.
  • Version of protocol: HTTP 프로토콜의 버전
  • Headers: 서버에 대한 추가 정보를 전달하는 선택적 헤더들.
  • Body: 전송된 리소스를 포함하는 Response의 본문과 유사한 본문을 포함한다.

 

Response

Response는 요청에 대한 서버의 답변이다.

  • Version of protocol
  • Status Code: Request의 성공 여부와, 실패시 그 이유를 나타내는 상태 코드다.
  • Status Message: 상태코드에 대한 짧은 설명이다.
  • Headers
  • Body: 가져온 리소스가 포함되는 본문.

 

 

Request와 Response의 구조

  • Start Line: 시작줄에는 실행되어야할 요청, 또는 응답에대한 성공 혹은 실패가 기록되어있다. 이 줄은 항상 한 줄로 끝난다.
  • Headers: 옵션으로 HTTP 헤더가 들어간다. 여기에는 Request에 대한 설명, 혹은 메세지 본문에 대한 설명이 들어간다.
  • Empty line: Request에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄이 삽입된다.
  • Body: 요청과 관련된 내용이 옵션으로 들어가거나, 응답과 관련된 문서가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.  

 

Header

Request에 들어가는 헤더는 HTTP 헤더의 기본 구조를 따른다. 

- 대소문자 구분이 없다.
- 문자열 다음에 콜론(:)이 붙는다.

 

헤더는 종류에 따라 다음과 같이 나눌 수 있다.

  • Request/Response Headers: Request의 경우 요청의 내용을 좀 더 구체화 시키고, 컨텍스트를 제공하기도 하며, 조건에 따른 제약사항을 가하기도 하면서 요청 내용을 수정한다. Response의 경우 상태줄에 들어가지 못했던 서버에 대한 추가 정보를 제공한다.
  • General Headers: 메세지 전체에 적용된다.
  • Entity Headers: Request Body에 적용된다.

Request Header
Response Header

Body

본문은 Request/Response의 마지막 부분에 들어간다. 본문은 단일 리소스 본문(Single-resource bodies)와 다중 리소스 본문(Multiple-resource bodies)로 나뉘게 된다.

 

  • Single-resource bodies: 헤더 2개, Content-Type과 Content-Length로 정의된 단일 파일로 구성된다.
  • Multiple-resoruce bodies: 멀티파트 본문으로 구성되며, 파트마다 다른 정보를 지니게 된다. 

 

추가적으로 길이를 모르는 단일 파일로 구성된 단일 리소스 본문도 있다.  Transfer-Encoding이 chunked로 설정되어 있으며, 파일은 청크로 나뉘어 인코딩 되어 있다.

 

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview