-
HTTP Request / Response 메시지 구조네트워크 2020. 9. 28. 21:11반응형
오늘은 HTTP Request(요청)와 Response(응답) 메시지 구조에 대해 알아보겠습니다.
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 이때 메시지 타입은 두 가지가 있습니다. Request는 클라이언트가 서버로 전달하는 메시지이고, Response는 Request에 대한 서버의 답변입니다. HTTP 메시지는 ASCII로 인코딩된 텍스트 정보이며, 이러한 메시지는 설정파일 (프록시, 서버), API (브라우저 경우) 혹은 다른 기타의 인터페이스에 의해 가공되어 제공됩니다.
메시지는 세 부분(공백 제외) 으로 구성되어 있습니다.
그러면 Request와 Response의 메시지 구조는 어떤 차이점이 있는지 알아보겠습니다.
HTTP Request 메시지 구조
1) Start Line
Start Line에는 HTTP 메소드, Request target, HTTP version이 있습니다.
- HTTP 메소드는 요청의 의도를 담고 있는 GET, POST, PUT, DELETE 등이 있습니다. GET은 존재하는 자원에 대한 요청, POST는 새로운 자원을 생성, PUT은 존재하는 자원에 대한 변경, DELETE는 존재하는 자원에 대한 삭제와 같은 기능을 가지고 있습니다.
- Request target은 HTTP Request가 전송되는 목표 주소입니다.
- HTTP version은 version에 따라 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시합니다.
2) Header
Header에는 HTTP Request 그 자체에 대한 정보를 담고 있습니다. key : value 형태로 이루어져 있습니다.
이 Header에 경우 Request, Response에만 있는 Header 외에 공통 Header도 있기에 여기선 우선 Request Header에 있는 정보만 알려드리겠습니다.
Host : 요청하려는 서버 호스트 이름과 포트번호
User-agent : 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.
Referer : 바로 직전에 머물렀던 웹 링크 주소
Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
Cookie : 쿠키 값이 key-value로 표현된다.
3) Body
HTTP Request가 전송하는 데이터를 담고 있는 부분입니다. 전송하는 데이터가 없다면 Body 부분은 비어있습니다.
보통 POST 요청일 경우, HTML 폼 데이터가 포함되어 있습니다.
HTTP Response 메시지 구조
1) Start Line
Response의 Start Line에는 HTTP version, Status Code, Status Text가 있습니다.
- Staus Code는 Response 상태를 나타내는 코드입니다. 요청 정상 처리를 나타내는 200이나 페이지가 이동되거나 없어졌을 때를 나타내는 404와 같은 코드로 이 부분은 추후에 정리 하겠습니다.
- Status Text는 Response 상태를 간략하게 글로 설명해 줍니다.
2) Header
Location : 301, 302 상태코드일 때만 볼 수 있는 Header로 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(URI)를 지정합니다.
Server : 웹 서버의 종류
Age : max-age 시간내에서 얼마나 흘렀는지 초 단위로 알려주는 값
Referrer-policy : 서버 referrer 정책을 알려주는 값 ex) origin, no-referrer, unsafe-url
WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시 , 서버가 제공하는 인증 방식
Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값
3) Body
HTTP Request 메시지의 Body와 동일합니다. 마찬가지로 전송하는 데이터가 없으면 비어있습니다.
공통 Header
Date : 현재시간
Cache-Control : 캐시 제어
+ no-store : 캐시를 저장하지 않겠다
+ no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인하겠다
+ must-revalidate : 만료된 캐시만 서버에 확인하겠다.
+ public : 공유 캐시에 저장해도 된다.
+ private : '브라우저' 같은 특정 사용자 환경에만 저장하겠다.
+ max-age : 캐시의 유효시간을 명시하겠다.
Transfer-Encoding : Body 내용 자체 압축 방식을 지정
Content-Encoding : Body의 리소스 압축 방식 (Transfer-Encoding은 Body 자체이므로 다름)
Content-type : Body의 미디어 타입 ex) application/json, text/html
Content-Length : Body의 길이
Content-language : Body를 이해하는데 가장 적절한 언어 ex) ko
Connection : 클라이언트와 서버의 연결 방식 설정. HTTP/1.1은 keep-alive로 연결 유지하는게 디폴트 입니다.
References
- https://jeong-pro.tistory.com/181
- https://ychae-leah.tistory.com/82
728x90'네트워크' 카테고리의 다른 글
TCP Flag란? (0) 2020.10.22 REST API란? (0) 2020.10.10 3-Way / 4-Way Handshake (0) 2020.10.04 HTTP Response Status Code (응답 상태 코드) (0) 2020.10.01 TCP/IP 및 TCP, UDP (0) 2020.09.20