HTTPQUERY
한국어

If-None-Match

사용법

If-None-Match 헤더는 엔티티 태그를 기준으로 캐시 재검증을 수행합니다. 클라이언트는 이전 응답에서 받은 하나 이상의 ETag 값을 포함시킵니다. 나열된 ETag 중 하나라도 현재 리소스와 일치하면 서버는 본문 없이 304 Not Modified 응답을 반환하고, 클라이언트는 캐시된 사본을 재사용합니다. 일치하는 ETag가 없으면 서버는 갱신된 콘텐츠와 함께 일반적인 200 응답을 보냅니다.

GET이나 HEAD 같은 안전한 메서드에서 이는 주된 캐시 재검증 메커니즘입니다. PUT 같은 안전하지 않은 메서드에서는 와일드카드 *를 쓴 If-None-Match가 기존 리소스를 덮어쓰는 것을 막아 업데이트 유실 문제를 피합니다. 안전하지 않은 요청에서 일치가 발견되면 서버는 412 Precondition Failed를 반환합니다.

같은 요청에 If-None-Match와 If-Modified-Since가 함께 나타나면 If-None-Match가 우선합니다. 엔티티 태그는 정확한 콘텐츠에 묶인 불투명 식별자인 반면 타임스탬프는 1초 단위 해상도를 가지고 시계 오차의 영향을 받으므로, ETag 기반 비교가 날짜 기반 비교보다 더 신뢰할 수 있습니다.

서버가 304를 반환할 때 응답에는 원래 성공 응답의 헤더들이 포함됩니다. Cache-Control, Content-Location, Date, ETag, Expires, Vary가 그것입니다.

참고

Googlebot은 이전 응답에 ETag가 포함되어 있었다면 크롤 요청에 If-None-Match를 보냅니다. 변경되지 않은 콘텐츠에 304를 반환하는 서버는 처리 시간과 자원을 절약하여 간접적으로 크롤 효율을 높입니다. 또한 서버는 요청에 조건부 헤더가 포함되어 있는지와 무관하게, 콘텐츠가 변경되지 않았다면 어떤 Googlebot 요청에 대해서든 선제적으로 304를 반환해도 됩니다. Cache-Control 응답 헤더의 max-age 필드를 콘텐츠가 변경되지 않을 것으로 예상되는 초 수로 설정하면 크롤러가 URL을 언제 다시 크롤링할지 판단하는 데 도움이 됩니다.

ETag 값

각각 큰따옴표로 감싼 하나 이상의 ETag 값입니다. 여러 값은 쉼표로 구분합니다. 강한 ETag와 (W/ 접두사가 붙은) 약한 ETag 모두 유효합니다.

* (와일드카드)

와일드카드 *는 현재 존재하는 모든 엔티티에 일치합니다. PUT과 함께 사용하여 리소스가 이미 존재할 때 생성을 막는 데 쓰입니다.

예시

클라이언트가 단일 ETag로 캐시된 리소스를 재검증합니다. 리소스가 주어진 엔티티 태그와 여전히 일치하면 서버는 304를 반환합니다.

If-None-Match: "abc123"

여러 캐시 버전을 보유한 클라이언트가 알고 있는 모든 ETag를 보냅니다. 서버는 각각을 현재 리소스와 대조합니다. 하나라도 일치하면 서버는 304를 반환합니다.

If-None-Match: "abc123", "def456"

약한 ETag 비교입니다. 약한 검증자는 바이트 단위 동일성이 아니라 의미적 동등성을 나타냅니다. W/ 접두사가 약한 비교를 뜻합니다.

If-None-Match: W/"v2.6"

덮어쓰기를 막기 위해 와일드카드를 사용하는 PUT 요청입니다. 대상 URL에 리소스가 이미 존재하면 서버는 412 Precondition Failed를 반환합니다.

PUT /api/resource HTTP/1.1
If-None-Match: *

참고

SEO 및 캐싱 관련 도움이 필요하면 전 Google SEO 컨설턴트인 Search Brothers에 문의하십시오.