HTTP(HyperText Transfer Protocol)는 웹 상에서 클라이언트와 서버 간에 데이터를 교환하는 방법을 정의한 프로토콜입니다. 웹 브라우저(클라이언트)가 웹 서버에 요청(Request)을 보내면, 서버는 요청에 대한 적절한 응답(Response)을 반환합니다. HTTP는 웹에서 HTML 문서, 이미지, 동영상, 스타일시트, 스크립트 등의 리소스를 전송하는 데 사용됩니다.
HTTP는 상태가 없는(stateless) 프로토콜로, 서버는 클라이언트의 이전 요청에 대한 정보를 저장하지 않습니다. 이러한 특성 때문에, 웹 애플리케이션에서 상태를 유지하기 위해 쿠키와 세션같은 기술이 필요합니다.
HTTP 메세지 구조는 세 부분(공백 제외) 으로 구성되어 있습니다.
출처 : https://deepwelloper.tistory.com/98
그러면 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와 동일합니다. 마찬가지로 전송하는 데이터가 없으면 비어있습니다.