If-None-Match

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

If-None-Match HTTP 요청 헤더는 요청을 조건부로 만듭니다. GETHEAD 메서드의 경우, 서버는 요청된 리소스에 주어진 값과 일치하는 ETag가 없는 경우에만 200 상태와 함께 요청된 리소스를 반환합니다. 다른 메서드의 경우, 최종적으로 존재하는 리소스의 ETag가 나열된 값 중 어느 것과도 일치하지 않는 경우에만 요청이 처리됩니다.

GETHEAD 메서드에서 조건이 실패하면 서버는 HTTP 상태 코드 304(Not Modified)를 반환해야 합니다. 서버 측 변경 사항을 적용하는 메서드의 경우 상태 코드 412(Precondition Failed)가 사용됩니다. 304 응답을 생성하는 서버는 동일한 요청에 대해 200(OK) 응답으로 전송되는 다양한 헤더 필드(Cache-Control, Content-Location, Date, ETag, Expires 등) 중 하나를 생성해야 합니다.

저장된 ETag와의 비교는 약한 비교 알고리즘을 활용하므로, 콘텐츠가 같다면 두 파일이 바이트 단위로 완전히 일치하지 않아도 동일하다고 판단합니다. 예를 들어, 푸터(footer)의 생성 날짜가 다른 두 페이지는 여전히 동일하다고 판단합니다.

서버에서 지원한다면, If-Modified-Since와 함께 사용할 경우 If-None-Match 가 우선 적용됩니다.

두 가지 일반적인 사용 사례가 있습니다.

  • GETHEAD 메서드의 경우, 연결된 ETag가 있는 캐시된 개체를 업데이트합니다.
  • 다른 메서드, 특히 PUT의 경우, If-None-Match* 값과 함께 사용되면 이는 아직 생성되지 않은 것으로 알려진 파일을 저장하는 데 활용될 수 있으며, 이전에 다른 업로드가 발생하지 않았다는 것을 보장합니다. 더불어 이전에 업로드한 데이터가 손실될 수 있으며 이 문제는 lost update problem의 한 형태입니다.
Header type Request header
Forbidden header name no

구문

http
If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

지시어

<etag_value>

개체 태그는 요청된 리소스를 고유하게 식별합니다. 이는 큰따옴표 사이에 위치한 ASCII 문자열로 표현되며(예: "675af34563dc-tr34"), 앞에 W/를 추가하여 약한 비교 알고리즘의 사용이 필요함을 나타낼 수 있습니다(If-None-Match에서는 해당 알고리즘만을 사용하므로 무의미합니다).

*

별표(asterisk)는 리소스를 나타내는 특수 값입니다. 이는 리소스를 업로드할 때, 특히 PUT을 사용하여, 동일한 식별자를 가진 다른 리소스가 이미 업로드되었는지를 확인할 때에만 유용합니다.

예제

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

명세서

Specification
HTTP Semantics
# field.if-none-match

브라우저 호환성

BCD tables only load in the browser

같이 보기