If-None-MatchIf-None-Match는 클라이언트가 가진 캐시 표현의 ETag를 서버에 보내, '이 ETag와 다를 때만 본문을 달라'고 요청하는 조건부 요청 헤더입니다. 캐시 재검증의 가장 정확한 수단입니다.
서버는 이전 응답에서 리소스의 버전 지문인 `ETag`를 내려줍니다. 다음 요청에서 클라이언트가 그 값을 If-None-Match에 담아 보내면, 서버는 현재 ETag와 비교합니다. 일치하면(변경 없음) 본문 없이 304 Not Modified를 반환해 대역폭을 절약하고, 다르면 200 OK와 함께 새 본문·새 ETag를 보냅니다.
GET·HEAD 같은 조회 요청에서는 캐시 재검증 용도로 쓰이지만, PUT·POST 같은 쓰기 요청에서는 다른 의미를 가집니다. `If-None-Match: *`는 '리소스가 아직 존재하지 않을 때만' 생성하라는 뜻으로, 동시에 같은 리소스를 만드는 경쟁 상태를 막는 안전한 생성(create-if-absent)에 쓰입니다. 이 조건이 실패하면 412 Precondition Failed가 반환됩니다.
ETag는 정확한 바이트 비교를 하는 강한(strong) 검증자와, 의미상 동등하면 되는 약한(weak, `W/` 접두) 검증자로 나뉩니다. If-None-Match는 약한 비교를 허용하므로 콘텐츠 협상·압축된 표현에도 잘 맞습니다.
If-None-Match: <etag>[, <etag>]* | *e.g. If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"