412 Precondition Failed 表示请求头中的一个或多个条件判断为假。它是 If-Match 或 If-Unmodified-Since 判断失败的结果,或者在 GET 和 HEAD 以外的方法中 If-None-Match 判断失败的结果。服务器没有执行所请求的操作。
它的主要用途是防止更新丢失(乐观并发控制)。客户端读取资源及其 ETag,编辑后带上 If-Match 和该 ETag 发送修改。如果在此期间有人修改了资源,ETag 就不再匹配,服务器会返回 412,而不是覆盖别人的修改。它也和 If-None-Match: * 一起使用,实现仅在资源尚不存在时才创建。
对于 GET 和 HEAD,If-None-Match 或 If-Modified-Since 判断为假时产生的是 304 Not Modified,而不是 412。
响应示例
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 的条件请求。