장쫄깃 기술블로그

[Network] HTTP Request/Response 메시지 구조 본문

ETC/Network

[Network] HTTP Request/Response 메시지 구조

장쫄깃 2022. 4. 18. 11:31
728x90

들어가며


HTTP에 대한 설명은 해당 글을 참고

링크 : https://jangjjolkit.tistory.com/12

 

[Network] HTTP Request/Response 란

HTTP(HyperText Transfer Protocol) HTTP란 텍스트 기반의 통신규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이러한 규약을 통해 프로그램들이 규악에 맞춰 개발해서 서로 정보를 교환할

jangjjolkit.tistory.com

HTTP Request와 Response는 기본적으로 같은 구조를 가지고 있지만 세부적으로 다른 점들이 존재한다.

HTTP Request / Response 메시지 구조

HTTP Request와 Response의 구조에 대해 자세하게 알아보려 한다.

 

 

HTTP Request 메시지 구조


1. Start Line (시작줄)

HTTP 메소드, Request Target, HTTP version이 있다.

  • HTTP 메소드 : 요청의 의도를 담고있는 메소드로, GET, POST, PUT, DELETE 등이 있음
  • Request Target : 요청이 전송되는 목표 주소
  • HTTP version : version에 따라 요청 메시지 구조나 데이터가 다를 수 있기 때문에 version을 명시

2. Header

HTTP Request 그 자체에 대한 정보를 담고 있다. key : value 형태로 이루어져 있다.

Header의 경우 Request, Response 각각이 쓰는 항목 외에 공통 항목이 있지만, 여기선 우선 Request Header에 있는 정보만 설명하겠다.

  • Host : 요청하려는 서버 호스트 이름과 포트번호
  • User-agent : 클라이언트 프로그램 정보로, 이 정보를 통해 서버는 클라이언트 프로그램(브라우저, 기기 등)에 맞는 최적의 데이터를 보낼 수 있음
  • Referrer : 바로 직전에 머물렀던 웹 링크 주소
  • Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
  • If-Modified-Since : 여기에 써여진 시간 이후로 변경된 리소스 취득하고, 페이지가 수정되었으면 최신 페이지로 교체
  • Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 항목
  • Origin : 서버로 POST 요청을 보낼 때 요청이 어느 주소에서 시작되었는지 나타내는 값으로, 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
  • Cookie : 쿠키 값이 key : value 로 표현

3. Body

HTTP Request가 전송하는 데이터를 담고있는 부분이다. 전송하는 데이터가 없으면 비어있을 수 있다.

보통 POST 요청일 경우, HTML 폼 데이터가 포함되어 있다.

 

 

HTTP Response 메시지 구조


1. Start Line (시작줄)

HTTP version, Status Code, Status Text가 있다.

  • Status Code : Response 상태를 나타내는 코드
  • Status Text : Response 상태를 간략하게 글로 설명

2. Header

  • Location : 301, 302 상태코드일 때만 볼 수 있는 항목으로, 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(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로 연결 유지하는게 default
728x90