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. 웹브라우져 ↔ 캐시서버 : 내가 가지고 있는 이미지를 웹 브라우저에게 직접 줘도 되는지 웹 서버에 확인
    2. 캐시 서버 ↔ 웹 서버 : 응. 나도 똑같은 이미지 가지고 있으니까, 캐시 서버 너가 직접 보내줘


1. If-Modified-Since 헤더 참고 사진



2. 컨텐츠 변경 시 : 200 OK 메시지와 함께 신규 컨텐츠 전송

  1. 클라이언트가 특정 컨텐츠를 요청
  2. 프록시 서버는 클라이언트의 요청을 받아 대신 실제 서버로 전달
  3. 실제 서버는 컨텐츠를 제공하는데 이때, 컨텐츠의 최종 수정시간을 Last-Modified 헤더에 포함하여 전달
  4. 프록시 서버는 실제 서버의 응답컨텐츠를 자신의 디스크(Disk)나 램(RAM)에 저장한후 그대로 클라이언트에게 전달

3. 컨텐츠 미 변경 시 : 304 Not Modified와 함께 페이로드(payload) 미전송

  1. 클라이언트가 같은 컨텐츠를 요청
  2. 프록시 서버는 클라이언트 요청을 받아 서버에 전달할때, 캐시되어 있는 컨텐츠임을 알고 If-Modified-Since 헤더에 Last-Modified 의 값(시간정보)을 표기하여 전달
  3. 실제 서버는 동일한 컨텐츠임을 확인하고 변경된 바가 없으니 직접 제공하라는 메시지를 전달(304 Not Modified)
  4. 프록시 서버는 자신의 디스크(Disk) 또는 램(RAM)에 저장되어 있는 컨텐츠를 클라이언트에게 전달