If-None-Match

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

같이 보기