https://developer.mozilla.org/ko/docs/Web/HTTP/Messages
https://gmlwjd9405.github.io/2019/01/28/http-header-types.html
구조
HTTP 메시지는 크게 3 부분으로 구성되어있다.
- start line
- headers
- body
리퀘스트
1. Start Line
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
GET /petbreedding/ HTTP/1.1
- HTTP 메서드
해당 리퀘스트에 들어가는 ACTION이 들어간다 주로 GET or POST - 타겟 URI
주로 URL, 또는 프로토콜, 포트, 도메인의 절대 경로가 나타난다. - HTTP 버전
HTTP 버전이 들어간다.
2. Headers
Host: 112.221.156.36:8090
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://112.221.156.36:8090/petbreedding/
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: JSESSIONID=6483986F820A21C3735A9FBC6B4992CF
- Host
요청이 전송되는 target의 host url: 예를 들어, naver.com - Connection
해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대한 정보 - Cache-Control
캐쉬를 어떻게 사용할지에 대한 정보 - User-Agent
클라이언트 소프트웨어(브라우저, OS) 명칭 및 버전 정보 - Accept
어떤 타입을 응답(response) 받을 수 있는지에 대한 정보
위 예시에선 text/html을 응답 받을 수 있다고 명시되어있고 언어는 한국어 영어, 인코딩은 ezip, deflate - Referer
바로 직전에 머물렀던 URL 주소 - Cookie
서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보
3. body
GET 방식은 본문이 없는 경우가 많다.
본문은 두가지로 나눌 수 있는데
- 단일-리소스 본문(single-resource bodies)
헤더 두 개(Content-Type와 Content-Length)로 정의된 단일 파일로 구성 - 다중-리소스 본문(multiple-resource bodies)
여러개의 파트로 구성되며 파트마다 다른 정보를 지니게 됩니다. 보통 HTML 폼과 관련이 있습니다.
리스폰스
1. Start Line
HTTP/1.1 200
- HTTP 버젼
- Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
예를 들어, 200 - Status text: 응답 상태를 간략하게 설명해주는 부분.
예를 들어, "Not Found"
2. Headers
- 리퀘스트와 동일
3. body
Content-Type: text/html;charset=UTF-8
Content-Language: ko-KR
Content-Length: 8040
Date: Fri, 13 Aug 2021 07:07:36 GMT
Keep-Alive: timeout=20
Connection: keep-alive
세 부분으로 나눌 수 있다.
- 단일-리소스 본문 (길이 정보 있음)
헤더 두개(Content-Type와 Content-Length) - 단일-리소스 본문 (길이 정보 없음)
Transfer-Encoding가 chunked로 설정되어 있으며, 파일은 청크로 나뉘어 인코딩 되어 있다. - 서로 다른 정보를 담고 있는 멀티파트로 이루어진 다중 리소스 본문
흔하지 않다.