✊ 필오의 개발일지
Back to Posts
2020년 1월 5일

엔터티와 인코딩

엔터티와 인코딩

HTTP는 매일 수십억 개의 미디어 객체를 실어 나른다. HTTP는 콘텐츠를 잘 나르기 위한 잘 라벨링된 엔터티를 사용한다.

엔터티에 대하여

1. 메세지는 컨테이너, 엔터티는 화물

1.1 엔터티 헤더 (참고 )

1. 엔터티 정보헤더

  1. Allow : 이 리소스에 대해 어떤 요청 메서드가 허용되는지

2. 콘텐츠 헤더

  1. Content-Type : 엔터티에 의해 전달된 객체의 종류
  2. Content-Length : 전달되는 메세지의 길이나 크기
  3. Content-Language : 전달되는 객체와 가장 잘 대응되는 자연어
  4. Content-Encoding : 객체 데이터에 대해 행해진 변형 (압축 등)
  5. Content-Location : 요청 시점 기준으로, 객체의 또 다르 위치
  6. Content-Range : 이 엔터티가 부분 엔터티라면, 이 헤더는 이 엔터티가 전체에서 어느 부분에 해당하는지 정의한다.
  7. Content-MD5 : 엔터티 본문의 콘텐츠에 대한 체크섬(중복검사의 한 형태)

3. 엔터티 캐싱 헤더

  1. Last-Modified : 서버에서 이 콘텐츠가 생성 혹은 수정된 날
  2. Expires : 이 엔터티 데이터가 더 이상 신선하지 않은 것으로 간주되기 시작하는 날짜와 시각
  3. ETag : 이 인스턴스에 대한 고유한 검사기

1.2 엔터티 본문

2. Content-Length 엔터티의 길이

2.1 잘림 검출

2.2 잘못된 Content-Length

2.3 Content-Length와 지속커넥션

2.4 콘텐츠 인코딩

2.5 엔터티 본문 길이 판별을 위한 규칙

switch (true)

  1. 본문을 갖는 것이 허용되지 않은 특정타입의 HTTP 메세지
  1. 메세지가 Transfer-Encoding 헤더를 포함하고 있다면
  1. 메세지가 Content-Length 헤더를 갖는다면
  1. (Content-type: multipart/byteranges) && (Content-Length가 정의되어있지 않다면)
  1. (default)

3. 미디어 타입과 Charset

3.1 텍스트 매체를 위한 문자 인코딩

Content-Type: text/html; charset=iso-8859-7

3.2 멀티파트 미디어 타입

1. 멀티파트 폼 제출 multipart/form-data

Content-Type: multipart/form-data; boundary=[abcdefghijklmnopqrstuvwzyz]

2. 멀티파트 범위 응답 multipart/byteranges

전송 전 ~ 전송 후

1. 엔터티 요약 Content-MD5

2. 콘텐츠 인코딩 Content-Encoding

  1. 과정
  2. 유형
  3. 관련 헤더

1. 과정

  1. 웹서버가 원본 Content-Type과 Content-Length 헤더를 수반한 원본 응답 메세지를 생성
  2. 콘텐츠 인코딩 서버가 인코딩된 메세지 생성 (원서버 or 프록시)
  1. 수신자는 인코딩된 메세지를 디코딩하고 원본을 얻는다.

모던 브라우저에는 gzip 압축해제를 자동으로 해준다. 참고 

2. 유형

Content-Encoding: {유형}

  1. gzip : GNU zip 인코딩이 적용되었음을 의미
  2. compress: 유닉스 파일 압축 프로그램인 compress가 실행되었음을 의미
  3. deflate : zlib 포맷으로 압축되었다는 의미
  4. identity : 어떤 인코딩도 수행되지 않았음을 의미. (Content-Encoding 헤더가 존재하지 않는다면, 이 값인 것으로 간주)

3. Accept-Encoding 헤더

Accept-Encoding: compress, gzip Accept-Encoding: Accept-Encoding: * Accept-Encoding: compress; q=0.5, gzip; q=1.0 Accept-Encoding: gzip; q=1.0, identiy; q=0.5, *; q=0

3. 전송 인코딩과 청크 인코딩 Transfer-encoding

3.1 안전한 전송

3.2 Transfer-encoding 헤더

GET /new_products.html HTTP/1.1 Host: feel5ny.github.io User-Agent: Mozilla/4.61 [en] (WinNT; I) TE: trailers, chunked
HTTP/1.1 200 OK Transfer-Encoding: chunked Server: Apache/3.0
  1. Transfer-encoding : 안전한 전송을 위해, 어떤 인코딩이 메세지에 적용되었는지 수신자에게 알려준다.
  2. TE : 어떤 확장된 전송 인코딩을 사용할 수 있는지 서버에게 알려주기 위해, 요청 헤더에 사용한다.

3.3 청크 인코딩

청크 인코딩과 지속 커넥션

청크 인코딩된 메세지의 트레일러

콘텐츠와 전송 인코딩의 조합

전송 인코딩 규칙

이미지 청크 인코딩 예시 



참고자료

Previous인스턴스 조작과 인코딩
Next2019 회고 + 2020 다짐 (feat. 글또)

Related

© 2025 Felix