412 Precondition Failed는 요청 헤더에 있는 하나 이상의 조건이 거짓으로 평가되었다는 뜻입니다. If-Match나 If-Unmodified-Since가 실패했거나, GET과 HEAD 이외의 메서드에서 If-None-Match가 실패한 결과입니다. 서버는 요청한 작업을 수행하지 않았습니다.
주된 목적은 낙관적 동시성 제어(optimistic concurrency control)를 통해 변경 사항이 유실되는 것을 막는 것입니다. 클라이언트는 리소스를 ETag와 함께 읽고, 수정한 뒤, If-Match와 그 ETag를 붙여 변경 사항을 보냅니다. 그사이 다른 사람이 리소스를 변경했다면 ETag가 더 이상 일치하지 않으므로, 서버는 다른 사람의 변경을 덮어쓰는 대신 412로 응답합니다. 또한 If-None-Match: *와 함께 사용해 아직 존재하지 않을 때만 리소스를 생성하는 데도 쓰입니다.
GET과 HEAD에서는 If-None-Match나 If-Modified-Since가 거짓이면 412가 아니라 304 Not Modified가 반환됩니다.
응답 예시
HTTP
HTTP/1.1 412 Precondition Failed
Date: Fri, 06 Nov 2026 10:15:32 GMT
ETag: "v8"
Content-Type: application/json
Content-Length: 52
{"error":"If-Match does not match the current ETag"} SEO 및 리디렉션 검사
주요 원인과 사용 사례
- 리소스를 읽은 뒤 리소스가 변경되어 편집이 거부되었습니다(ETag 불일치).
If-None-Match: *가 기존 파일을 덮어쓰지 못하게 막았습니다.- 클라우드 스토리지나 CDN API가 오래된 ETag가 담긴 조건부 요청을 받았습니다.