HTTP/HTTP 헤더
HTTP 프로토콜 If-Modified-Since헤더
hippo 데브옵스
2022. 6. 25. 15:55
- If-Modified-Since 헤더는 캐시동작에 있어서 유효한 컨텐츠를 클라이언트에게 제공할 수 있게 해 주는 중요한 정보
- 중요한 If-Modified-Since 헤더의 정보에 오류가 있는 경우 웹 서버는 If-Modified-Since 헤더의 정보를 무시하고, 컨텐츠 전체를 서비스
- If-Modified-Since 헤더의 표시 형식이 잘못 표기
- 서버의 현재시간보다 If-Modified-Since의 표기 시간이 늦는 경우 문제 발생
- 캐시 동작의 장점 중 하나는 네트워크 대역폭(Bandwidth) 절감 가능 → 프록시 서버에 캐시되어 있는 컨텐츠가 큰 용량인 경우 프록시 서버와 실제 서버간의 네트워크 대역폭을 절약 가능
- If-Modified-Since 헤더는 If-UnModified-Since 헤더의 반대 의미
- If-Modified-Since 헤더는 컨텐츠가 변경되었는지를 체크
- If-Unmodified-Since 헤더는 변경되지 않았는지를 체크
If-Modified-Since (변경된 경우 중심)
If-Modified-Since 헤더를 이해하기 위해서는 Last-Modified 헤더의 의미를 먼저 알아야함
- Last-Modified 헤더는 ETag와 같이 응답헤더
- Last-Modified 헤더는 단어 의미와 같이 컨텐츠가 마지막으로 변경된 시점 정보를 값으로 가짐
- 웹서버의 컨텐츠가 가장 마지막으로 수정된 시점을 표현
If-Modified-Since 헤더는 캐시(Cache)관련 헤더
- 웹브라우져(클라이언트)나 캐시서버는 웹 서버의 응답 컨텐츠들을 디스크(Disk)나 램(RAM)에 저장
- 캐싱(caching)된 이미지등의 컨텐츠들을 유효한지 여부 매번 확인 필요
- 웹서버에서 컨텐츠가 변경되었는데, 그것을 반영하지 못하면 문제가 발생
If-Modified-Since 헤더는 웹브라우져나 캐시서버가 웹서버에게 컨텐츠가 변경되었는지 확인하는 용도로 사용
- 웹브라우져 ↔ 캐시서버 : 내가 가지고 있는 이미지를 웹 브라우저에게 직접 줘도 되는지 웹 서버에 확인
- 캐시 서버 ↔ 웹 서버 : 응. 나도 똑같은 이미지 가지고 있으니까, 캐시 서버 너가 직접 보내줘
1. If-Modified-Since 헤더 참고 사진
2. 컨텐츠 변경 시 : 200 OK 메시지와 함께 신규 컨텐츠 전송
- 클라이언트가 특정 컨텐츠를 요청
- 프록시 서버는 클라이언트의 요청을 받아 대신 실제 서버로 전달
- 실제 서버는 컨텐츠를 제공하는데 이때, 컨텐츠의 최종 수정시간을 Last-Modified 헤더에 포함하여 전달
- 프록시 서버는 실제 서버의 응답컨텐츠를 자신의 디스크(Disk)나 램(RAM)에 저장한후 그대로 클라이언트에게 전달
3. 컨텐츠 미 변경 시 : 304 Not Modified와 함께 페이로드(payload) 미전송
- 클라이언트가 같은 컨텐츠를 요청
- 프록시 서버는 클라이언트 요청을 받아 서버에 전달할때, 캐시되어 있는 컨텐츠임을 알고 If-Modified-Since 헤더에 Last-Modified 의 값(시간정보)을 표기하여 전달
- 실제 서버는 동일한 컨텐츠임을 확인하고 변경된 바가 없으니 직접 제공하라는 메시지를 전달(304 Not Modified)
- 프록시 서버는 자신의 디스크(Disk) 또는 램(RAM)에 저장되어 있는 컨텐츠를 클라이언트에게 전달