[Http&Network Basic] 3장 HTTP 메시지

2020. 7. 20. 08:57책/Http&Network Basic

1. HTTP 메시지

HTTP에서 교환하는 정보는 HTTP 메시지라고 불리느느데 리퀘스트 메시지와 리스폰스 메시지로 나뉜다. 각각은 복수 행의 데이터로 구성된 텍스트 문자열 이다.

리퀘스트 메시지와 리스폰스 메시지는 기본적으로, 메시지 헤더의 첫줄만 보고도 구별이 가능하다. 리퀘스트 메시지의 경우 맨 첫줄에 리퀘스트 라인이라고 불리는 문자열이 있는데, HTTP 메소드와 리퀘스트 URI, 사용하는 HTTP 버전이 명시된다. 리스폰스 메시지의 경우 HTTP 버전과 리스폰스 결과를 나타내는 status code, 그에대한 설명이 명시된다.

 

2. 인코딩

HTTP로 데이터를 전송할 경우 그대로 전송할 수도 있지만 전송할 때에 인코딩(변환)을 실시함으로써 전송 효율을 높일 수 있다. 이때 혼동되는 두가지 개념이 있는데 메시지와 엔티티 이다.

  • 메시지 : HTTP 통신의 기본단위로 옥텟 시퀀스로 구성되고, 통신을 통해서 전송된다.
  • 엔티티: 리퀘스트랑 리스폰스의 부가물로 전송되는 정보로서, 엔티티 헤더필드와 엔티티 바디로 구성된다.

메시지의 역할을 엔티티를 운반하는 일인데, 기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용될 경우 엔티티 바디의 내용이 변화될 수 있다. 

 

전송되는 여러 방식

  • 콘텐츠 코딩 : 압축해서 보내는 방식이다. 메일에 파일을 첨부해서 보내는 경우와 같이 용량을 줄이기 위해서 해당 파일을 zip으로 압축하고 나서 첨부하는 것과 같다. 콘텐츠 코딩은 엔티티에 적용하는 인코딩을 가리키는데, 엔티티 정보를 유지한 채로 압축하여 클라이언트에게 송신한다. 수신한 클라이언트 측에서 이것을 디코딩한다.
  • 청크 전송 코딩 : 압축과 달리 엔티티 바디를 분할하여 전송하는 것을 청크 전송 코딩이라고 한다. 
  • 멀티파트 : 메일의 경우 복수의 첨부파일을 붙여서 보낼 수 있는데, 이때 사용되는 기능이 MIME이다. 핵심적으로 멀티파느라고 하는 여러 다른 종류의 데이터를 수용하는 방법을 사용하는 것인데, 하나의 메시지 바디 내부에 엔티티를 여러개 포함시키는 것이다. 
  • 레인지 리퀘스트 : 광대역이 네트워크를 사용할 수 있기 전에는, 다운로드 중에 커넥션이 끊길경우 처음부터 다시 다운로드를 해야하는 문제가 있었다. 이러한 문제를 해결하기 위해서 resume기능이 필요했는데, 이전에 다운로드 받던곳부터 다운로드를 재개할 수 있도록 하는 것이다. 
  • 콘텐츠 네고시에이션 : 같은 콘텐츠이지만 여러개의 페이지를 지닌 웹 페이지가 있다. 대표적으로, 같은 페이지이지만 언어만 바뀌는 경우를 예로 들 수 있다. 콘텐츠 네고시에이션은 이와 같이 클라이언트에게 더욱 적합한 리소스를 제공하기 위한 구조이다. 콘텐츠 네고시에이션은 다음에 따로 제대로 공부해 봐야 할 것 같다.