안녕하세요, 여행벌입니다.

오늘은 HTTP 프로토콜 메소드에 이어서 HTTP 프로토콜의 정보에 해당하는 메시지에 대해서 알아보겠습니다.


[ HTTP 메시지 ]

HTTP 프로토콜에서 교환하는 정보를 HTTP메시지라고 부릅니다. 리퀘스트 측 HTTP메시지를 리퀘스트 메시지, 리스폰스 측 HTTP메시지를 리스폰스 메시지라고 부르고 다음과 같은 형태를 유지한다.

network04

시작라인 / 메시지헤더 / CRLF(개행) / 메시지바디 순으로 이루어져있으며 메시지바디는 없을 수도 있습니다. 저번 포스팅에서 다뤘던 GET 메소드는 대부분 메시지 바디가 없습니다.

  • 시작 라인 : 시작라인은 리퀘스트에서는 리퀘스트라인, 리스폰스에서는 상태라인 이라고 불립니다.
    • 리퀘스트라인 : 리퀘스트에 사용하는 메소드 / 리퀘스트 URI / HTTP 버전이 포함.
    • 상태라인 : 리스폰스 결과를 나타내는 상태코드와 설명 / HTTP 버전이 포함.
  • 헤더 필드 : HTTP 전송에 필요한 모든 부가정보가 담겨있는 곳으로, 리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드가 포함됩니다.
  • 바디 필드 : 실제 전송할 데이터를 담고 있는 필드로 HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터가 들어갈 수 있다.

[ HTTP 인코딩 ]

 HTTP로 데이터를 전송할 경우 그대로 전송할 수도 있지만, 인코딩을 실시함으로써 전송 효율을 높일 수 있습니다. 전송할 때 인코딩을 하면 CPU 등의 리소스는 많이 사용하지만 더 효율적으로 데이터를 전송할 수 있습니다.

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

 HTTP 메시지 바디는 리퀘스트랑 리스폰스에 관한 엔티디 바디를 운반해줍니다. 인코딩을 한다는 것은 엔티티 정보를 인코딩을 해서 메시지 바디에 실어서 보낸다는 뜻입니다.

참고!

콘텐츠 코딩(Content Codings)

엔티티에 적용하는 인코딩을 가리키는 용어로 엔티티 정보를 유지한 채로 압축을 해줍니다. 콘텐츠 코딩된 엔티티는 수신한 클라이언트 측에서 디코딩을 해서 이용합니다.

[ 청크 전송 코딩(Chunked transfer Coding) ]

 HTTP 통신에서는 리퀘스트했었던 리소스 전부에서 엔티티 바디의 전송이 완료되지 않으면 브라우저에 표시되지 않습니다. 그래서 사이즈가 큰 데이터를 전송하는 경우에는 데이터를 분할해서 조금씩 브라우저에 표시하는 청크 전송 코딩을 이용해야합니다.

청크 전송 코딩은 엔티티 바디를 청크 단위로 분해해서 전송합니다.

[ 여러 데이터를 보내는 멀티파트 ]

 메일의 경우에는 메일의 본문이나 복수의 첨부 파일을 붙여서 함께 보낼 수 있습니다. MIME( Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장 사양 ) 은 이미지, 텍스트, 영상 등 다양한 데이터의 바이너리 데이터를 아스키 문자열에 인코딩하는 방법과 데이터 종류는 나타내는 방법등을 규정하고 있습니다. 이 MIME 의 확장 사양에 있는 Multipart 라고 하는 여러 다른 종류의 데이터를 수용하는 방법을 HTTP 에서도 사용해 하나의 메시지 바디 내부에 엔티티를 여러 개 포함해서 보낼 수 있습니다.

multipart/form-data : Web 폼으로부터 파일 업로드에 사용됩니다.

multipart/byteranges : 상태코드 206 리스폰스 메시지가 복수 범위의 내용을 포함하는 때에 사용됩니다.

[ 레인지 리퀘스트(Range Request) ]

 HTTP 통신에서 커넥션이 끊어지게 되면 엔티티 정보를 처음부터 다시 전달받아야합니다. 따라서, 문제가 생겼을 때 이전에 전달받은 범위 뒤에서부터 전달을 다시 받는 레인지 리퀘스트가 등장했습니다. 이름 그대로 엔티티의 범위를 지정해서 해당 범위 만을 리퀘스트 하는 방법입니다.

[ 콘텐츠 네고시에이션(Content Negotiation) ]

 같은 콘텐츠(내용)이지만 여러 개의 페이지를 지닌 웹 페이지가 있습니다. ( 구글 영어판, 한국어판 ) 이러한 웹 페이지에서 같은 URI에 액세스할 때에 적절한 웹 페이지를 표시해주는 구조를 콘텐츠 네고시에이션이라 합니다.

콘텐츠 네고시에이션은 제공하는 리소스를 언어와 문자 세트, 인코딩 방식 등을 기준으로 적합한 리소스를 판단합니다.

Accept / Accept-Cahrset / Accept-Encoding / Accept-Language / Content-Language


참고

- 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식

- 그림으로 배우는 HTTP&Network Basic

+ Recent posts