HTTP 메시지 공통 구조
- 메시지 헤더
- 서버와 클라이언트가 꼭 처리해야 하는 내용과 속성
- 개행 문자
- 메시지 바디
- 꼭 전송되는 데이터 그 자체
메시지 헤더 구성 요소
- 리퀘스트 라인 혹은 상태 라인
- 리퀘스트 라인: 리퀘스트에 사용하는 메소드와 URI, HTTP 버전이 포함됨
- 상태 라인: 리스폰스 결과를 나타내는 상태 코드와 설명, 사용하는 HTTP 버전이 포함됨
- 헤더 필드: 리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타냄
- 리퀘스트/리스폰스 헤어 필드, 일반 헤더 필드, 엔티티 헤더 필드 등
인코딩으로 전송 효율을 높이다
- HTTP로 데이터를 전송할 때 인코딩(변환)을 하면 전송 효율을 높일 수 있음
- 메시지: HTTP 통신의 기본 단위로 8비트로 구성되고 통신을 통해 전송됨
- 엔티티: 리퀘스트랑 리스폰스의 페이로드(payload)로 전송되는 정보로 엔티티 헤더 필드와 엔티티 바디로 구성됨
- 콘텐츠 코딩 (Content Codings)
- 엔티티를 압축함
- 콘텐츠 코딩된 엔티티는 수신한 클라이언트 측에서 디코딩함
- 청크 전송 코딩 (Chunked transfer Coding)
- 엔티티 바디를 청크(덩어리)로 분해함
- 청크 전송 코딩된 엔티티 바디를 수신한 클라이언트 측에서 원래의 엔티티 바디로 디코딩함
여러 데이터를 보내는 멀티파트
- 멀티파트 (Multipart): 텍스트, 이미지, 영상 등 여러 다른 종류의 데이터를 수용하는 방법
- HTTP도 멀티파트에 대응하고 있기 때문에 하나의 메시지 바디 내부에 엔티티를 여러 개 포함시켜 보낼 수 있음
- 주로 이미지나 텍스트 파일 등을 업로드할 때 사용
- HTTP 메시지로 멀티파트를 사용할 때는 `Content-Type` 헤더 필드 사용
Content-Type: multipart/form-data; Content-Type: multipart/byteranges;
일부분만 받는 레인지 리퀘스트
- 리줌(Resume): 다운로드 중에 커넥션이 끊어진 경우 이전에 다운로드를 한 곳부터 다운로드를 재개하는 기능
- 이 기능의 실현을 위해서는 엔티티의 범위를 지정해서 다운로드해야 함
- 레인지 리퀘스트 (Range Request)
- 바이트의 범위를 지정하여 리퀘스트 하는 것
- 리퀘스트 할 때 `Range` 헤더 필드를 사용해서 리소스의 바이트 레인지를 지정함
// 5.001~10,000 바이트 Range: bytes = 5001-10000 // 5,001 바이트 이상 Range: bytes = 5001-
최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션
- 콘텐츠 네고시에이션 (Content Negotiation)
- 클라이언트와 서버가 제공하는 리소스의 내용에 대해서 교섭함
- 클라이언트에 더욱 적합한 리소스를 제공하기 위한 목적
- 제공하는 리소스를 언어, 인코딩 방식 등을 기준으로 판단함
- 판단 기준은 리퀘스트 메시지에 포함된 리퀘스트 헤더 필드
Accept Accept-Charset Accept-Encoding Accept-Language Content-Language
- 예시: 브라우저 설정 언어에 따라 구글이 영어판 혹은 한국어판 페이지로 표시됨
이 글은 《그림으로 배우는 Http & Network Basic》를 참고하여 작성하였습니다.