含义
服务器要求请求必须是条件请求(If-Match 等),以防止更新丢失。
常见原因
- 在强制乐观锁的 API 上发送不带 If-Match 的 PUT 或 PATCH
解决方法
客户端或访问者
先 GET 资源拿到 ETag,更新时在 If-Match 中带上它。
网站或 API 的维护者
在响应体中说明需要哪个请求头。
响应示例
HTTP/1.1
HTTP/1.1 428 Precondition Required
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Precondition Required",
"status": 428,
"detail": "Send If-Match with the ETag you last read."
} 规范
常见问题
› API 为什么要求 If-Match?
为了防止两个客户端在不知情的情况下互相覆盖修改。
› 428 和 412 的区别?
428:没有发送前提条件。412:发送了但不成立。