Last-Modified
사용법
Last-Modified 헤더는 조건부 요청에서 약한 검증자 역할을 합니다. 클라이언트가 Last-Modified를 담은 응답을 캐시하면, 그 타임스탬프를 저장했다가 이후 요청의 If-Modified-Since 요청 헤더로 그 날짜를 되돌려 보냅니다. 서버는 저장된 날짜를 리소스의 현재 수정 시각과 비교합니다. 리소스가 변경되지 않았다면 서버는 본문 없이 304 Not Modified를 반환합니다. 리소스가 변경되었다면 서버는 갱신된 전체 응답을 보냅니다.
If-Unmodified-Since 헤더는 PUT이나 DELETE 같은 안전하지 않은 메서드의 전제 조건 검사에 같은 타임스탬프를 사용하며, 주어진 날짜 이후 리소스가 수정되었다면 412 Precondition Failed를 반환합니다.
Last-Modified 날짜는 ETag보다 정밀도가 낮습니다. 타임스탬프는 1초 단위 입도를 가지므로 같은 초 안에서 일어난 변경은 날짜 기반 검증에 보이지 않습니다. ETag 헤더는 정확한 콘텐츠에 묶인 더 강력한 검증자를 제공합니다. 응답에 Last-Modified와 ETag가 모두 있으면 재검증 시 ETag가 우선합니다.
날짜 값은 HTTP-date 형식을 따릅니다. 요일 이름, 두 자리 일, 월 약어, 네 자리 연도, 시·분·초 단위 시각, 그리고 뒤에 GMT가 옵니다. 형식은 Weekday, DD Mon YYYY HH:MM:SS GMT 입니다.
Last-Modified: Fri, 04 Sep 1998 19:15:56 GMT
참고
ETag는 Last-Modified보다 정밀합니다. ETag는 1초 미만의 수정을 포함해 모든 변경을 감지하지만, Last-Modified는 1초 단위 입도를 가집니다. Last-Modified는 서버 간 시계 오차의 영향을 받는 반면, 콘텐츠 해싱에 기반한 ETag는 로드 밸런싱된 인스턴스 사이에서도 이식 가능합니다. 둘 다 있을 때는 If-None-Match(ETag)가 If-Modified-Since보다 우선하므로, 최대한의 호환성을 위해 두 헤더를 함께 사용하십시오.
참고
Google의 크롤링 인프라는 HTTP 캐싱 표준이 정의한 대로 Last-Modified와 If-Modified-Since를 지원합니다. 파싱 문제를 피하려면 Last-Modified의 날짜가 HTTP-date 형식을 따라야 합니다. Cache-Control 응답 헤더의 max-age 필드를 콘텐츠가 변경되지 않을 것으로 예상되는 초 수로 설정하면 크롤러가 URL을 언제 다시 크롤링할지 판단하는 데 도움이 됩니다. 예를 들어 Cache-Control: max-age=94043 처럼 설정합니다.
예시
리소스의 수정 날짜를 담은 응답입니다. 클라이언트는 이후의 조건부 요청을 위해 이 타임스탬프를 저장합니다.
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
완전한 조건부 요청 주기입니다. 서버는 최초 응답에 Last-Modified를 보냅니다. 다음 요청에서 클라이언트는 그 타임스탬프를 If-Modified-Since로 되돌려 보냅니다. 리소스가 변경되지 않았다면 서버는 304를 반환합니다.
HTTP/1.1 200 OK
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Content-Type: text/html
이후 요청:
GET /page HTTP/1.1
If-Modified-Since: Wed, 01 Jun 2022 08:00:00 GMT
변경되지 않았을 때의 서버 응답:
HTTP/1.1 304 Not Modified
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Last-Modified와 ETag를 함께 담은 응답입니다. ETag는 강력한 검증자를 제공하고, 수정 날짜는 날짜 기반 검증만 지원하는 클라이언트를 위한 대체 수단이 됩니다.
Last-Modified: Fri, 22 Nov 2024 14:30:00 GMT
ETag: "a1b2c3d4"
Cache-Control: max-age=3600
참고
SEO 및 캐싱 관련 도움이 필요하면 전 Google SEO 컨설턴트인 Search Brothers에 문의하십시오.