본문 바로가기

Network & Web

HTTP 메시지의 구조

HTTP 메시지의 구조로 요청과 응답에 각각 뭐가 있는지 살펴보자.

 

 

 http의 구조 (웹을 지탱하는 기술 128p 참고)

 

전체적으로 간단히 보면 이렇게 생겼다.

 

여기서 스타트 라인은 요청메시지일 경우 요청라인, 응답메시지일 경우 스테이터스라인이다.

 

HTTP 요청메시지

요청메시지의 예를 보면서 구조를 나눠보자.

HTTP 요청메시지 (웹을 지탱하는 기술 참고)

1) 요청라인

요청 라인 - GET / HTTP/1.1

메서드(GET), 요청 URI(/), 프로토콜 버전(HTTP/1.1) 로 구성된다.

쿼리 파라미터가 URI에 포함되는 경우도 요청 URI에 포함된다.

(예- GET /search?title=title-test&author=olivejua HTTP/1.1)

2) 헤더

헤더는 메시지의 바디에 대한 부가적인 정보, 즉 메타 데이터를 표현한다.

클라이언트와 서버의 헤더를 보고 메시지에 대한 동작을 결정한다. 미디어 타입과 언어태그 등 프레임워크가 아닌 구현하는 사람이 구체적으로 설정해야만 하는 헤더도 많이 있다.

또한, 리소스에 대한 접근권한을 설정하는 인증이나 클라이언트와 서버의 통신횟수의 양을 감소시키는 캐시 같은 HTTP의 기능을 헤더로 실현한다.

하나의 메시지는 복수의 헤더를 가질 수 있다. 각각의 헤더는 이름:값의 구성을 하고 있다. 

(예- Host:example.com)

위의 예시의 경우에 Host부터 Connection까지가 헤더의 범위이다.

 

  • Host - 요청한 서버의 host
  • User-Agent - 클라이언트 소프트웨어(브라우저, os 등)의 이름과 버전
  • Accept - 클라이언트가 허용할 수 있는 파일 형식(MIME TYPE)
  • Accept-Language - 클라이언트가 인식할 수 있는 언어로 우선순위 지정이 가능하다
  • Accept-Encoding - 클라이언트가 원하는 문자 인코딩 방식
  • Accept-Charset - 클라이언트가 원하는 문자 집합
  • Keep-Alive - 일반 헤더는 송신자가 연결에 대한 타임아웃(timeout)과 요청 최대 개수를 어떻게 정했는지(max)에 대해 알려준다.
  • Connection - 클라이언트와 서버 간 연결에 대한 옵션 설정. 위의 예시와 같은 경우 현재 TCP 커넥션을 유지한다.

지금은 위의 예시에 나와있는 것들만 간략하게 썼는데 헤더도 종류가 많기 때문에 나중에 따로 글로 정리해봐야겠다.

3) 바디

위의 예시에서는 get 방식이기 때문에 body 부분이 없지만 post나 put일 경우에 바디에 리소스의 표현자체가 들어간다.

 

 

 

 

HTTP 응답메시지

HTTP 응답메시지 (웹을 지탱하는 기술 참고)

 

1) 스테이터스라인

스테이터스 라인 - HTTP/1.1 200 OK

프로토콜 버전(HTTP/1.1), 스테이터스 코드(200), 텍스트 구문(HTTP/1.1) 로 구성된다.

2)헤더

요청메시지와 마찬가지로 헤더이다. 위의 예시에서는 HTML의 MIME 미디어타입과 그 문자 인코딩 방식(utf-8)을 지정하고 있다. 

3)바디

이 예시에서는 바디에 HTML이 포함되어있다.

 

 

 

 


도움이 되었던 책 및 사이트