7. Entity Bodies
• 가공되지 않은(raw) 데이터만을 담고 있다.
• Content-Type엔터티 헤더가 데이터 타입을 설명
(image/jpeg, text/javascript)
• Content-Encoding엔터티 헤더가 압축 혹인 인코딩
여부를 설명(gzip)
7
8. Content-Length(1)
• 엔터티 본문의 크기를 바이트 단위로 표현
(압축이 되었다면, 압축 후의 크기)
• 엔터티 본문이 있다면 필수적으로 있어야할 헤더
(메시지가 chunked encoding일 때는 필수X)
8
9. Content-Length(2)
• 메시지 잘림(truncation)을 검출하기 위해 사용
( Older versions of HTTP used connection close
to delimit the end of a message)
• Content-Length헤더가 없으면 HTTP본문을 캐싱하
지 않는다.
9
10. Content-Length(3)
• 지속 커넥션에서는 Content-Length헤더 필수
The Content-Length header lets the client know
where one message ends and the next begins.
• chunked encoding인 데이터는 예외
10
11. 엔터티 본문 길이 규칙
1. 본문(body)가 허용되지 않는 특정 타입의 경우,
Content-Length 헤더 무시 (HEAD)
2. Transfer-Encoding헤더가 있다면, zero-byte chunk로
끝나야한다.
3. Content-Length헤더가 있다면, 본문의 길이를 나타냄
(Transfer-Encoding헤더가 있다면, Content-Length무
시)
4. multipart/byteranges미디어 타입이라면 자기가 알아서
계산
5. 엔터티는 커넥션이 닫힐 때, 끝난다.
11
12. 엔터티 요약(digests)
• HTTP메시지가 변형되는 것을 방지, 체크섬 생성
• Content-MD5 (MD5적용)
• 중단간 프락시와 캐시는 해당 헤더를 변경하지 않음
• 중복 저장 방지를 위한 해시 테이블의 키로 사용
• Want-Digest
12
13. Media Type and
Charset
• 엔티티 본문의 MIME타입을 기술
• 콘텐츠를 적절히 해독하고 처리하기 위해 사용
• 원본 엔터티 본문의 미디어 타입을 명시
• 형식 : primary media type / subtype
13
28. Transfer-Encoding 규칙
• 전송 인코딩의 집합은 반드시 ‘chunked’를 포함해야
한다.
• 메시지 본문에 적용된 마지막 전송 인코딩이 존재해
야한다.
• 청크 전송 인코딩은 반드시 메시지 본문에 한 번 이
상 적용되어야한다.
29. Freshness
• Expires Header
• 얼마나 오랫동안 컨텐츠를 캐시해야하는지 명시
• 하지만 클라이언트와 시계를 동기화 하기 어려움
• Expires: Sun Mar 18 23:59:59 GMT 2001
• Cache-Control
• 서버를 떠난 후로부터의 총 시간을 초단위로 설정
• cache-control:private,max-age=31535990
29
30. Validator(1)
• 캐시된 사본이 신선하지 않다면, 서버에서 가져옴
• 서버와 캐시된 파일이 같은지 검증
• 네트워크 대여폭 낭비를 줄이고, 캐시와 서버에 불필
요한 부하를 줄이기 위해서
30
31. Validator(2)
• ETag(Entity Tag)
• An ETag is an opaque identifier assigned by a
web server to a specific version of a resource
found at a URL. If the resource representation at
that URL ever changes, a new and different ETag
is assigned.
31
#10:이전 http version에서는 content-length대신, delimiter로 content의 끝을 검사
content-length값이 없으면 해당 메시지를 올바로 수신하지 못했다고 판단, 캐싱을 하지 않는다.
#11:지속 커넥션 : TCP커넥션을 HTTP요청에 재사용하기 위해서 처리가 완료된 후에도 TCP커넥션을 유지하는 것
#12:아래와 같은 순서대로 Content-Length를 가질 수 있다.
Content-Length헤더를 가질수는 있지만 본문을 갖지 않습니다.
여러개의 chunked로 날라오는 데이터를 구분하는 방법은 마지막 http메시지에 0로 끝나는 메세지를 받았을 때
-
HTTP/1.1명세에서는 사라짐
위의 어떤 규칙에도 해당되지 않는다면 엔터티는 커넥션이 닫힐 때, 끝난다.