[3장] HTTP 메세지

신은지·2021년 9월 26일
0

리퀘스트와 리스폰스의 동작

3.1 HTTP 메시지

  • HTTP 메시지
    : HTTP에서 교환하는 정보
    : 메시지 헤더 + 메시지 바디로 구성 - 최초로 나타나는 개행문자로 둘을 구분한다.
    : 메시지 바디가 항상 존재하는건 아니다!

3.2 리퀘스트 메시지와 리스폰스 메시지의 구조

리퀘스트 메시지 : 리퀘스트 라인 + 리퀘스트 헤더 필드 + 일반 헤더 필드 + 엔티티 헤더 필드 + 그외
리스폰스 메시지 : 상태 라인 + 리스폰스 헤더 필드 + 일반 헤더 필드 + 엔티티 헤더 필드 + 그외

  • 리퀘스트 라인
    : 리퀘스트에 사용하는 메소드와 URI, 사용하는 http 버전
  • 상태 라인
    : 리스폰스 결과를 나타내는 상태 코드, 설명, 사용 http 버전
  • 헤더 필드
    : 리퀘스트와 리스폰스의 여러 조건과 속성을 나타낸다. 일반 / 리퀘스트 / 리스폰스 / 엔티티 헤더필드로 총 4가지가 있다.
  • 그 외
    : HTTP의 RFC에는 없는 헤더 필드 (쿠키 등)이 포함된다.

3.3 전송 효율을 높이는 인코딩

  • 메시지 : HTTP 통신의 기본 단위. 옥텟 시퀀스(8비트)로 구성되며 통신을 통해 전송된다.
  • 엔티티 : 리퀘스트와 리스폰스의 페이로드로 전송되는 정보.
  • HTTP 메시지 바디
    : 리퀘스트와 리스폰스에 관한 엔티티 바디를 운반
    : 전송 코딩이 적용되면 메시지 바디와 엔티티 바디의 내용이 달라진다.

인코딩을 하면 다량의 액세스를 효율 좋게 처리할 수 있기 때문에 전송 효율이 좋다.
단, CPU 등 리소스 소모는 더 크다.

  • 콘텐츠 코딩
    : 엔티티에 적용되는 인코딩
    : 엔티티 정보를 유지한 채로 압축해서 송신하고, 수신 측에서 엔티티를 디코딩한다.
    : gzip, compress, deflate, identity 등

  • 청크 전송 코딩
    : 엔티티 바디를 청크로 분할하는 인코딩
    : 다음 청크 사이즈를 16진수로 표시
    : 수신한 클라이언트에서 원래의 엔티티 바디로 디코딩한다.


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

MIME (Multipurpose Internet Mail Extensions. 다목적 인터넷 메일 확장 사양)
: 메일에 텍스트, 영상, 이미지 등 여러 데이터가 포함된 경우.
: 바이너리 데이터를 문자열에 인코딩하는 등의 방법으로 멀티 파트(여러 종류의 데이터)를 수용한다.

  • HTTP의 멀티파트 대응
    : 메시지 바디 내부에 여러 엔티티를 포함시킨다.
    : Content-type 헤더 필드를 사용한다.
    : 멀티 파트 각각의 엔티티를 구분하기 위해 boundary 문자열을 사용하며, 파트마다 헤더 필드가 포함된다.
    : 파트 내부에 멀티파트가 포함될 수도 있다.

  • 멀티파트의 종류
    (1) multipart/form-data
    : web 폼으로부터 파일 업로드에 사용
    (2) multipart/byteranges
    : 상태 코드 206 리스폰스 메시지가 복수 범위의 내용을 포함하는 경우


3.5 일부분만 받는 레인지 리퀘스트

다운로드 중 커넥션이 끊어졌을 때, 처음부터 다시 다운로드해야 하는 문제를 해결하기 위해 리줌(resume) 기능 사용

  • 레인지 리퀘스트 (range request)
    : 이전에 다운로드하던 곳을 기억하기 위해, 엔티티의 범위를 지정해서 리퀘스트 한다.
    : Range 헤더 필드를 사용, 리소스의 바이트 레인지를 지정한다.

  • 레인지 리퀘스트의 리스폰스
    : 상태코드 206의 리스폰스 메시지를 돌려 받는다.
    : 복수 범위의 레인지 리퀘스트의 경우, multipart/byteranges 리스폰스를 받는다.
    : 서버가 레인지 리퀘스트를 지원하지 않는 경우, 상태 코드 200 메시지와 함께 완전한 엔티티가 돌아온다.


3.6 최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션

  • 콘텐츠 네고시에이션 (Content Negotiation)
    : 한 사이트에 영어판과 한국어판이 존재하는 것처럼, 같은 콘텐츠지만 여러 페이지를 갖는 웹 페이지
    : 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하여, 클라이언트에게 더 적합한 리소스를 제공한다.
    : 언어, 문자 세트, 인코딩 방식을 기준으로 리소스를 판단한다.

  • 콘텐츠 네고시에이션의 종류
    (1) 서버 구동형 네고시에이션 (Server-driven Negotiation)
    : 서버 측에서 리퀘스트 헤더 필드의 정보를 참고하여 자동으로 처리한다.
    : 브라우저에서 보내는 정보를 기반으로 하기에, 정말로 클라이언트에게 적합한지 알 수 없다.
    (2) 에이전트 구동형 네고시에이션 (Agent-driven Negotiation)
    : 클라이언트 측에서 브라우저에 표시된 선택지를 수동으로 선택하여 처리한다.
    : JS를 이용, OS 종류, 브라우저의 종류에 따라 웹 페이지가 자동으로 전환되는 경우에 해당한다.
    (3) 트랜스페어런트 네고시에이션 (Transparent Negotiation)
    : 서버 구동형 + 에이전트 구동형
    : 서버와 클라이언트가 각각 처리한다.

profile
호그와트 장학생

0개의 댓글