HTTP 메시지

  • HTTP 메시지 : HTTP에서 교환하는 정보
    • req 측 : 리퀘스트 메시지/ res 측: 리스폰스 메시지
    • 복수 행의 데이터로 구성된 텍스트 문자열
    • 메시지 헤더와 메시지 바디로 구성
    • 개행 문자(CR+LF)로 메시지 헤더와 바디를 구분

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

  • 리퀘스트 라인
    • 리퀘스트 메소드, 리퀘스트 URI, HTTP 버전이 포함
  • 상태 라인
    • 상태 코드와 설명, HTTP 버전이 포함
  • 헤더 필드
    • req와 res의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함
    • 일반, req, res, 엔티티 헤더 필드 등 4종류가 있음
  • 그 외
    • HTTP의 RFC에는 없는 헤더 필드(쿠키 등)가 포함되는 경우

인코딩으로 전송 효율을 높이다

  • 데이터를 전송할 때 인코딩(변환) 하면
    • 전송 효율을 높일 수 있음
    • 다량의 액세스를 효율 좋게 처리 가능
    • 인코딩 처리를 위해 CPU 등의 리소스가 많이 소비됨

메시지 바디와 엔티티 바디의 차이

  • 메시지(message)
    • HTTP 통신의 기본 단위로 옥텟 시퀀스(Octet sequence)로 구성되고 통신을 통해 전송

    옥텟(Octet) : 8비트

  • 메시지 바디의 역할
    • req와 res에 관한 엔티티 바디를 운반하는 일
  • 엔티티(entity)
    • req와 res의 페이로드(payload, 부가물)로 전송되는 정보
    • 엔티티 헤더 필드와 엔티티 바디로 구성

압축해서 보내는 콘텐츠 코딩

  • 콘텐츠 코딩(Content Codings)
    • HTTP에서 엔티티에 적용하는 인코딩을 말함
    • 엔티티 정보를 유지한채로 압축함
    • 콘텐츠 코딩된 엔티티는 수신한 클라언트 측에서 디코딩 함
  • 주요 콘텐츠 압축 종류
    • gzip(GNU zip)
    • compress(UNIX의 표준 압축)
    • deflate(zlib)
    • identity(인코딩 없음)

분해해서 보내는 청크 전송 코딩

  • 청크 전송 코딩(Chunked transfer Coding)
    • 엔티티 바디를 청크(덩어리로) 분할하는 기능
    • 청크 전송 코딩된 엔티티 바디는 수신한 클라이언트 측에서 디코딩 함

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

  • MIME(다목적 인터넷 메일 확장 사양)
    • 메일로 텍스트, 영상, 이미지 등 여러 다른 데이터를 다루기 위한 기능

MIME(Multipurpose Internet Mail Extensions)

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

광대역의 네트워크가 발전하기 전에는 대용량의 이미지와 데이터를 다운로드 중에 커넥션이 끊기면 처음부터 다시 다운로드 해야했다. -> 다운로드 받는데 어려움이 있었음

  • 리줌(resume)
    • 이전에 다운로드를 한 곳에서 부터 다운로드 재개 가능
    • 리줌을 실현하기 위해서는 엔티티의 범위를 지정해서 다운로드 해야함 -> 레인지 리퀘스트
  • 레인지 리퀘스트(Range Request)
    • 범위를 지정하여 req하는 것
    • 리소스에서 지정한 바이트의 범위(바이트 레인지)만을 req 할 수 있음
    • Range 헤더 필드를 사용해 리소스의 바이트 레인지를 지정함

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

  • 콘텐츠 네고시에이션(Content Negotiation)
    • 같은 콘텐츠(내용)지만 영어판과 한국판 같이 표시되는 언어가 다른 웹페이지
    • 브라우저가 같은 URI에 액세스할 때 각 언어에 맞는 웹페이지를 표시

콘텐츠 네코시에이션 종류

  • 서버 구동형 네고시에이션(Server-driven Negotiation)
    • 서버 측에서 콘텐츠 네고시에이션을 하는 방식
  • 에이전트 구동형 네고시에이션(Agent-driven Negotiation)
    • 클라이언트 측에서 콘텐츠 네고시에이션을 하는 방식
  • 트랜스페어런트 네고시에이션(Transparent Negotiation)
    • 서버 구동형과 에이전트 구동형을 혼합한 것
    • 서버와 클라이언트가 각각 콘텐츠 네고시에이션 하는 방식

reference

그림으로 배우는 HTTP & Network Basic