과거의 내가 미래의 나에게
HTTP 학습 (3-4) - 엔티티 헤더 필드 본문
엔티티 헤더 필드는 리퀘스트 메시지와 리스폰스 메시지에 포함된 엔티티에 사용되는 헤더로 콘텐츠의 갱신 시간 같은 엔티티에 관한 정보를 포함한다.
1. Allow
리소스가 지원하는 메소드의 집합을 나열한다.
만약 서버가 받을 수 없는 메소드를 수신한 경우, 상태 코드 405 Method Not Allowed로 리스폰스 하되 반드시 Allow 헤더필드를 붙여 수신 가능한 메소드 목록을 클라이언트에 전달하도록 해야한다.
2. Content-Encoding
서버가 엔티티 바디에 대해서 실시한 콘텐츠 코딩 형식을 전달한다.
Transfer-Encoding은 서버에 의해 적용되는 콘텐츠 전송 방식이고 Content-Encoding은 전달하는 콘텐츠의 형식을 나타낸다.
3. Content-Language
엔티티 바디에 사용된 자연어(한국어, 영어따위)를 전달한다.
4. Content-Length
엔티티 바디의 크기(bytes)를 전달한다. 클라이언트는 서버에게 보통 리소스를 요청할 때 클라이언트가 이 리소스 전송의 시작과 끝을 알 수 있는 정보가 바로 Content-Length이다. 방법으로는 Content-Length에 표시된 전체 bytes를 참고하여 수신 bytes를 계산하게 되고, 계산된 bytes를 모두 전송받은 경우를 리소스의 끝으로 판단하는 것이다.
이와 같이 Content-Length는 HTTP 1.1에서는 반드시 필요한 헤더 정보인데 세상 모든 리소스를 Content-Length로만 알 수 있는 것은 아니다. Transfer-Encoding을 사용한 경우가 그 예시인데, chunked 전송 방식인 경우 데이터를 조각내어 보내다가 메시지 바디 끝에 0을 표시하여 끝을 알린다. 그러므로 chunked 전송 방식인 경우 Content-Length를 보내지 않는다.
5. Content-Location
메시지 바디에 관련된 URI를 전달한다.
Location 헤더와 비슷하고 또 결과적으로 클라이언트가 접하는 결과물로 보면 두 헤더는 비슷하지만 이들은 각 목적이 다르다. Content-Location는 응답할 때 리소스가 있는 그 위치의 URI를 나타내고 Location은 리다이렉션 시에 새로운 리소스의 위치를 알려주는 것이다.
6. Content-MD5
메시지 바디가 변경되지 않고 도착했는지 확인하기 위해 MD5 알고리즘에 의해서 생성된 값을 전달한다.
클라이언트가 메시지를 받으면 메시지 바디가 변경되지 않고 잘 왔는지 확인하기 위해 메시지 바디에 같은 MD5 알고리즘을 실행한다. 이렇게 해서 도출한 값과 Contents-MD5 값과 비교하여 메시지 바디가 올바른지 여부를 확인하는 것이다.
하지만 악의적으로 메시지 바디를 변경한다면 Contents-MD5로도 유효성을 도출해내지 못할 수 있다. 왜냐하면 악의적으로 메시지 바디를 변조할 때 Contents-MD5 값도 같이 변조하기에 비교할 수가 없게 되기 때문이다.
7. Content-Range
Range 리퀘스트에 대해 응답할 때 사용되는 헤더 필드이다. 응답으로 보낸 리소스가 어느 부분에 해당하는가를 전달한다.
8. Content-Type
클라이언트가 요청한 리소스의 형태를 표시하는 형태로 Accept 헤더 필드와 비슷하게 메인타입/서브타입으로 보내온다.
9. Expires
리소스의 유효 기한 날짜를 나타낸다. 캐시 서버가 Expires 헤더 필드를 포함한 리소스를 수신한 경우 필드 값으로 지정된 날짜까지 리스폰스의 복사본으로 유지하고 리퀘스트에는 캐시로 응답한다. 지정된 날짜가 지난 경우 서버에 리소스를 얻으러 간다.
만약 리소스가 캐싱되지 않기를 원한다면 Expires의 값을 Date 헤더 필드의 값과 같은 날짜로 해두면 된다.
10. Last-Modified
리소스가 마지막으로 갱신되었던 날짜 정보를 전달한다.
참고 문서
- [HTTP 프로토콜 강좌]#21 HTTP 엔티티 헤더 1... - https://withbundo.blogspot.com//search?updated-max=2017-08-21T17:05:0%2B09:00&max-results=1&pgno=7
'CS' 카테고리의 다른 글
HTTP 학습 (3-3) - 응답 헤더 필드 (0) | 2023.11.28 |
---|---|
HTTP 학습 (3-2) - 요청 헤더 필드 (0) | 2023.11.18 |
HTTP 학습 (3-1) - 일반 헤더 필드 (0) | 2023.11.01 |
HTTP 학습 (3) - HTTP 메시지 (0) | 2023.10.27 |
HTTP 학습 (2) - 동작 과정과 특징 (0) | 2023.10.22 |