Ý nghĩa
Một điều kiện trong header yêu cầu, như If-Match hoặc If-Unmodified-Since, cho kết quả sai, nên máy chủ không áp dụng yêu cầu.
Nguyên nhân thường gặp
- Người khác đã cập nhật tài nguyên (ETag đã đổi)
- Dùng ETag cũ đã lưu đệm trong If-Match
- Tải lên có điều kiện vào kho lưu trữ đã có đối tượng mới hơn
Cách khắc phục
Nếu bạn là máy khách hoặc người truy cập
GET lại tài nguyên để lấy ETag hiện tại, áp dụng lại thay đổi và gửi lại.
Nếu bạn quản lý trang web hoặc API
Trả ETag hiện tại và thực hiện kiểm tra điều kiện nguyên tử cùng với thao tác ghi.
Phản hồi mẫu
HTTP/1.1
HTTP/1.1 412 Precondition Failed
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "v8"
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Precondition Failed",
"status": 412,
"detail": "If-Match \"v7\" does not match the current version \"v8\"."
} Đặc tả
Câu hỏi thường gặp
› Kiểm soát đồng thời lạc quan là gì?
Client gửi If-Match kèm ETag đã đọc; máy chủ từ chối ghi bằng 412 nếu tài nguyên đã thay đổi trong lúc đó.
› 412 hay 428?
412: điều kiện của bạn không thỏa. 428: bạn bắt buộc phải gửi điều kiện.