그림으로 배우는 Http Network - 3장 정리

Sorbet·2021년 2월 14일
0

그림HNB

목록 보기
5/9

3장. HTTP 정보는 HTTP 메시지에 있다

  • 목차
3.1 HTTP 메시지
3.2 리퀘스트 메시지와 리스폰스 메시지의 구조
3.3 인코딩으로 전송 효율을 높이다
3.3.1 메시지 바디와 엔티티 바디의 차이
3.3.2 압축해서 보내는 콘텐츠 코딩
3.3.3 분해해서 보내는 청크 전송 코딩
3.4 여러 데이터를 보내는 멀티 파트
3.5 일부분만 받는 레인지 리퀘스트
3.6 최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션

HTTP 메시지의 구조

  • HTTP 메시지의 구조는 두가지
    • 메시지 Header
    • 메시지 Body
      : 위 두가지가 있고, 헤더와 바디는 CR+LF(캐리지리턴과 라인피드) 사이로 구분되어있다. 그냥 보기에는 빈칸 한줄 들어가있음

Request의 Header 구조

  • Request의 메시지 헤더는
    • 리퀘스트 라인
      : 메소드 + HTTP버전 + URI
    • 리퀘스트 헤더 필드
      : 여러 조건과 속성 그리고 각종 헤더필드들
    • 일반 헤더 필드
    • 엔티티 헤더 필드
    • Other
      : 쿠키 등등..

Request의 Body 구조

  • Request의 메시지 바디는
    • 엔티티

Response 의 Header 구조

  • 리스폰스의 메시지헤더는
    • 상태라인
      : 리스폰스 결과를 나타내는 상태코드 + 상태코드의 설명 + HTTP 버전
    • 리스폰스 헤더 필드
      : 여러 조건과 속성 그리고 각종 헤더필드들
    • 일반 헤더 필드
    • 엔티티 헤더 필드
    • Other
      : 쿠키 등등..

Encoding (인코딩)

: 전송효율을 높이기 위한 방법

  • Http에 데이터(엔티티)를 그대로 바이너리로 전송할 수 있지만, 좀더 효율적으로 빠르게 전송하기 위해서 인코딩(변환)을 합니다
  • 단점이 있다면 인코딩된 데이터는 받는쪽에서는 디코딩(변환해제) 해야되기 때문에 컴퓨팅 자원을 더 사용하게 됨
  • Encoding 방법은 3가지가 있는데 디테일하게 알필요는없고 각각 어떤 원리인지만 알면 된다
    • 압축 : Contents encoding
    • 쪼개기 : chunked encoding
    • 멀티미디어별 대응 : Multipart MIME

여기서 잠깐! : 엔티티가 뭔지 모르는 흑우 없제?

  • 엔티티
    : HTTP 메시지(리퀘스트 혹은 리스폰스)의 바디에 적재되는 실제 데이터임
    • 사실 헤더는 어떤의미에서 메타데이터라고 볼수 있고, 실제 데이터는 바디이며 이것이 바로 엔티티! 혹자는 payload(적재화물)이라고도 함
  • 메시지
    : HTTP통신의 기본단위, 옥텟시퀀스(8bit = 1byte)단위로 전송되고 통신으로 전달됨
    • http 메시지 바디의 역할은 엔티티 바디를 운반(전달)하는 일 입니다.
    • 일반적으로 엔티티바디 와 메시지 바디는 동일하지만 가끔 아닌 경우가 있습니다.
      • 전송 인코딩이 적용된 경우!!!

Contents encoding

: 내용을 압축해 보내는 기술

chunked encoding

: 내용을 분해(쪼개서) 보내는 기술

  • HTTP 통신에서는 리퀘스트/리스폰스가 온전하게 전송완료되지 않으면 브라우저에 표시되지 않습니다.(낫띵 올 에브리띵!)
  • 전송하고자 하는 데이터가 큰 경우 전송 성공확률을 높이기 위해 조금씩 분할해 보내는 방식이 청크 인코딩입니다
    • 조금씩 분할해 보내면 수신측도 데이터를 분할해 조금씩 표시한다
    • 참고로 분해한 작은 덩어리 덩어리를 청크라고 한다(청크의 원래 의미가 덩어리..)
  • 청크와 청크 사이 연결은 : 다음 청크 사이즈를 16진수로 사용해 단락을 표시하고, 단위청크마다 엔티티 바디 끝에 CRLF 문자를 붙여둡니다(한줄 떨어져 있다)

Multipart 와 MIME

  • Multipart

    • Multipart 는 Http를 통해 file을 server로 전송하기 위해 사용되는 contents-type입니다.
    • Http 중에서도 Message body에 들어가는 데이터 타입을 Http Header 에 명시해주는데 여기서 Content-type 필드에 원하는 타입을 명시(적어주면)해주면 됩니다.
    • Content-type 필드에 MIME라고 기술해주면 되고, 이외에도 다양한 Content-type 필드에 들어갈수 있는 속성들이 있습니다.
  • MIME

    • MIME란 텍스트, 영상, 이미지, 음성 과 같은 멀티미디어 데이터를 다루기 위한 기능이 있습
  • 참고로

    • HTTP도 멀티파트에 대응하는 프로토콜이라 하나의 메시지 바디 내부에 여러개의 엔티티를 포함해 보낼수 있고, 이 기능으로 주로 이미지나 텍스트파일, 첨부파일등을 업로드 하는데 사용합니다

Range Request

: 데이터의 일부분만 돌려받는 리퀘스트 방식

  • HTTP는 문서 전체가 전달되지 않으면 아무것도 없는 Nothing or Everything 이라고 앞에서 소개했는데요
    • HTTP 전송(다운로드)도중에 커넥션이 종료되면 처음부터 다시 다운로드를 해야하는 불편함이 있었는데
      : 이건 마치, 4기가짜리 영화를 다운받던 도중 마지막 1byte에서 에러가 나 처음부터 다운로드를 다시받아야 하는 상황으로 생각해주시면 됩니다.
    • 이러한 문제를 해결하고자, 리줌(resume, 재개)기능이 필요해졌습니다.
      • Range Request(레인지 리퀘스트) 는
        • 리줌(resume)기능의 HTTP 구현기술이름입니다.
        • 예를들어 전체가 100바이트인 이미지를 30~50 바이트 구간만 필요할 때 해당 기능을 사용합니다.

content negotiation(콘텐츠 협상)

: 동일한 페이지에서 사용자마다 서로 다른(언어, 캐릭터셋)콘텐츠를 전송해야 할때

  • content negotiation 이란, 클라이언트와 서버가 제공하는 리소스의 내용을 적합하게 사람마다 다르게 제공한다! 라는 개념
  • 크게 3가지
    • 캐릭터세트 (MSM949 / UTF8 / UTF16)
    • 언어(Lang en/kr/cn ...)
    • 인코딩 방식

content negotiation 관련 Request Header field 정리

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

콘텐츠 네고 관련 종류는 3가지

  • 서버 구동형
  • 에이전트 구동형
  • 트랜스페어런트
profile
Sorbet is good...!

0개의 댓글