3.1 HTTP 메시지
HTTP 메시지는 메시지 헤더와 개행 문자 메시지 바디로 이루어져 있습니다.
3.2 리퀘스트 메시지와 리스폰스 메시지의 구조
리퀘스트
•
메시지 헤더
◦
리퀘스트 라인 : 리퀘스트에 사용하는 메소드와 URI, HTTP 버전
◦
리퀘스트 헤더필드 : (헤더 필드 공통) 리퀘스트와 리스폰스 여러 조건과 속성 등
◦
일반 헤더 필드
◦
엔티티 헤더 필드
◦
etc : 공식적으로 제공되지 않는 헤더 필드(ex. 쿠키)
•
개행 문자
•
메시지 바디
리스폰스
•
메시지 헤더
◦
상태 라인 : 결과를 나타내는 상태 코드, 설명, HTTP 버전
◦
리스폰스 헤더 필드
◦
일반 헤더 필드
◦
엔티티 헤더 필드
◦
etc
•
개행 문자
•
메시지 바디
3.3 인코딩으로 전송 효율을 높이다
전송 시 인코딩을 통해 효율을 높일 수 있습니다.
3.3.1 메시지 바디와 엔티티 바디의 차이
메시지 : HTTP 통신의 기본 단위로 통신을 통해서 전송 됩니다.
엔티티 : 리퀘스트와 리스폰스의 페이로드로 전송되는 정보로 헤더와 바디로 구성됩니다. 즉 HTTP 메시지의 바디에 적재되는 실제 데이터
기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용된 경우 달라집니다.
3.3.2 압축해서 보내는 콘텐츠 코딩
콘텐츠 코딩을 통해서 엔티티에 적용하는 인코딩을 가르킬 수 있습니다.
3.3.3 분해해서 보내는 청크 전송 코딩
사이즈 큰 데이터를 전송하는 경우에는 분할해서 보내는데 이를 청크 전송 코딩이라고 부릅니다.
3.4 여러 데이터를 보내는 멀티 파트
메일의 경우 여러 첨부 파일을 붙여서 보내는데 이를 MIME(다목적 인터넷 메일 확장 사양)로 불리는 메일로 여러 다른 데이터를 다루기 위한 기능을 사용하고 있습니다. 이는 멀티파트를 통해 여러 데이터를 수용하고 있는데 HTTP도 멀티파트에 대응하고 있어 하나의 메시지 바디에 엔티티를 여러개 포함시킬 수 있습니다.
•
multipart/form-data
◦
Web 폼으로부터 파일 업로드에 사용됩니다.
•
multipart/byteranges
◦
상태 코드 206 리스폰스 메시지가 복수 범위의 내용을 포함하는데 사용됩니다.
멀티파트 각각의 엔티티를 구분하기 위해 boundary 문자열을 사용하는데 각 엔티티 선두에는 문자열 앞에 —를 삽입하고, 멀티파트의 마지막에는 마지막에도 —를 붙여줍니다.
3.5 일부분만 받는 레인지 리퀘스트
다운로드 중에 컨넥션이 끊어지게 되면 다시 다운로드를 받아야 하기 때문에 리줌 기능이 필요해졌습니다. 이때 엔티티의 범위를 지정해서 다운로드 받아야 하는데 이것을 레인지 리퀘스트라고 부릅니다.
레인지 리퀘스트에 대한 리스폰스는 상태 코드 206으로 돌아오고, 지원하지 않는 경우 200으로 응답이 돌아옵니다.
3.6 최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션
서로 다른 언어를 사용하는 브라우저가 같은 URI에 엑세스할 때 분기해주는 구조를 콘텐츠 네고시에이션이라고 합니다. 이는 제공하는 리소스를 언어, 문자 세트, 인코딩 방식 등을 기준으로 판단하고 있습니다.
•
서버 구동형 네고시에이션
◦
서버 측에서 콘텐츠 네고시에이션을 하는데, 서버에서 리퀘스트 헤더 필드의 정보를 참고해서 자동적으로 처리합니다.
•
에이전트 구동형 네고시에이션
◦
클라이언트 측에서 처리하는데 유저가 수동으로 선택합니다.
◦
OS의 종류나 브라우저의 종류에 따라서 PC와 스마트폰 용이 나뉘는 것이 이에 해당합니다.
•
트랜스페어런트 네고시에이션
◦
서버와 클라이언트가 콘텐츠 네고시에이션을 하는 방식입니다.