ความหมาย
เซิร์ฟเวอร์ต้องการให้คำขอเป็นแบบมีเงื่อนไข (If-Match เป็นต้น) เพื่อป้องกันการอัปเดตสูญหาย
สาเหตุที่พบบ่อย
- PUT หรือ PATCH ที่ไม่มี If-Match บน API ที่บังคับ optimistic locking
วิธีแก้ไข
สำหรับไคลเอนต์หรือผู้เยี่ยมชม
GET resource เอา ETag ของมัน แล้วส่งใน If-Match พร้อมการอัปเดต
สำหรับผู้ดูแลเว็บไซต์หรือ API
อธิบายใน body ว่าต้องใช้ header ใด
ตัวอย่างการตอบกลับ
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: ส่งมาแต่ไม่เป็นจริง