[그림으로 배우는 H&N CH.3]
3. HTTP 메세지
- HTTP 메세지 : HTTP에서 교환하는 정보
- 리퀘스트 메세지 : 리퀘스트 측 HTTP 메세지
- 리스폰스 메세지 : 리스폰스 측 HTTP 메세지
3.1 HTTP 메세지 구조
- 리퀘스트 메세지
- 메세지 헤더
- 리퀘스트 라인 : 리퀘스트에 사용하는 메소드, 리퀘스트 URI, HTTP 버전
- 리퀘스트 헤더 필드
- 일반 헤더 필드
- 엔티티 헤더 필드
- 개행 문자
- 메세지 바디
- 리스폰스 메세지
- 메세지 헤더
- 상태 라인 : 리스폰스 결과 상태 코드, 설명, HTTP 버전
- 리스폰스 헤더 필드
- 일반 헤더 필드
- 엔티티 헤더 필드
- 개행 문자
- 메세지 바디
**헤더 필드 : 리퀘스트 & 리스폰스의 여러 조건, 속성 (일반 헤더 필드, 리퀘스트 & 리스폰스 헤더 필드, 엔티티 헤더 필드)
3.2 인코딩
HTTP로 데이터 전송 시, 인코딩 → 전송 효율 높일 수 있음
**메세지 바디 & 엔티티 바디 차이
-
메세지 : HTTP 통신의 기본 단위, 통신을 통해 전송됨
-
엔티티 : 리퀘스트 & 리스폰스의 페이로드로 전송되는 정보 (엔티티 헤더 필드 + 엔티티 바디)
-
메세지 바디 : 리퀘스트와 리스폰스에 대한 엔티티 바디 운반
-
메세지 바디 = 엔티티 바디, but 전송 코딩이 적용 → 엔티티 바디의 내용 변화 → 메세지 바디 ≠ 엔티티 바디
-
인코딩 방법
-
콘텐츠 코딩 : 용량을 줄이기 위해 엔티티 정보를 유지한 채로 압축
-
청크 전송 코딩 : 사이즈가 큰 데이터를 전송하는 경우 데이터를 분할 (원래 HTTP 통신에서는 리소스 전부에서 엔티티 바디의 전송이 완료 x → 브라우저에 표시 x)
** 인코딩된 엔티티들은 수신한 클라이언트 측에서 디코딩 함
3.3 멀티파트
- 멀티파트 : 여러 다른 종류의 데이터를 수용
- multipart/form-data : Web 폼으로부터 파일 업로드에 사용됨 ?????
- multipart/byteranges : 상태코드 206 - 복수 범위의 내용을 포함하는 때에 사용
- 파트마다 헤더 필드 포함
- 파트를 내부에 포함 가능
- MIME (Multipurpose Internet Mail Extensions) : 메일로 여러 다른 데이터를 다루는 기능
- 바이너리 데이터를 아스키 문자열에 인코딩하는 방법 규정
- 데이터 종류를 나타내는 방법 규정
- HTTP : 멀티파트에 대응 → 하나의 메세지 바디 내부에 여러개의 엔티티 포함 가능
- HTTP 메세지로 멀티파트 사용할 때 쓰는 헤더 필드 : Content-type
- 멀티파트 각각의 엔티티 구분 : boundary 문자열 사용, boundary 문자열 앞에 "- - " 삽입, 멀티파트 마지막에도 "- -" 삽입
3.4 레인지 리퀘스트
- 리줌 : 이전에 다운로드 한 곳부터 다운로드 재개 가능한 기능
- 레인지 리퀘스트 : 리줌 실현을 위해 엔티티 범위를 지정해서 리퀘스트 하는 것
- 레인지 리퀘스트 시 사용하는 헤더 필드 : Range 헤더 필드
Range : bytes = 5001-10000
Range : bytes = -3000, 5000-7000
- 리스폰스
- 상태코드 : 206 Partial Content
- 복수 범위의 레인지 리퀘스트의 경우(하단) multilpart/byteranges
- 레인지 리퀘스트를 지원하지 않는 서버의 경우 상태코드 : 200 OK (완전한 엔티티)
3.5 콘텐츠 네고시에이션
- 콘텐츠 네고시에이션 : 클라이언트와 서버가 리소스의 내용에 대해 교섭하는 것
- ex. 같은 웹 페이지에서 영어판과 한국어판이 있을 경우 같은 URI에 액세스 해도 주로 사용하는 언어를 기준으로 다른 언어 웹 페이지를 표시함
- 판단 기준
- 콘텐츠 네고시에이션의 종류
- 서버 구동형 네고시에이션 : 서버 측에서 콘텐츠 네고시에이션을 하는 방식
- 서버 측에서 리퀘스트 헤더 필드의 정보 참고 → 자동으로 처리
- 브라우저가 보낸 정보 기반 → 유저에게 적절한 선택인지는 미지수
- 에이전트 구동형 네고시에이션 : 클라이언트 측에서 콘텐츠 네고시에이션 하는 방식
- 브라우저에 표시된 선택지 중 유저가 수동 선택
- JS 사용하여 웹 페이지에서 자동으로 정하게 하는 방법도 있음 (ex. OS 종류에 따라 pc 혹은 스마트폰 용의 웹 페이지로 자동 전환)
- 트랜스페어런트 네고시에이션 : 서버 구동형 & 에이전트 구동형 혼합, 각각 콘텐츠 네고시에이션을 함