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에 적용된다.
Body
본문은 Request/Response의 마지막 부분에 들어간다. 본문은 단일 리소스 본문(Single-resource bodies)와 다중 리소스 본문(Multiple-resource bodies)로 나뉘게 된다.
- Single-resource bodies: 헤더 2개, Content-Type과 Content-Length로 정의된 단일 파일로 구성된다.
- Multiple-resoruce bodies: 멀티파트 본문으로 구성되며, 파트마다 다른 정보를 지니게 된다.
추가적으로 길이를 모르는 단일 파일로 구성된 단일 리소스 본문도 있다. Transfer-Encoding이 chunked로 설정되어 있으며, 파일은 청크로 나뉘어 인코딩 되어 있다.
'프로그래밍 > Network' 카테고리의 다른 글
NGINX 서브 도메인 설정하기 (feat.CloudFlare) (0) | 2022.09.17 |
---|---|
HTTP 연결과 커넥션 관리 (0) | 2022.02.13 |
MIME 타입 (0) | 2022.02.12 |
[Nginx] 리버스 프록시로 사용하기 (백업 서버 설정, 로드 밸런싱) (0) | 2021.11.05 |
Ngnix의 개념과 작동방식 정리 (feat. Apache) (0) | 2021.10.31 |