ความหมาย
เงื่อนไขใน header ของคำขอ เช่น If-Match หรือ If-Unmodified-Since ให้ผลเป็นเท็จ เซิร์ฟเวอร์จึงไม่ดำเนินการตามคำขอ
สาเหตุที่พบบ่อย
- มีคนอื่นอัปเดต resource (ETag เปลี่ยน)
- ใช้ ETag เก่าจากแคชใน If-Match
- อัปโหลดแบบมีเงื่อนไขไปยัง storage ที่มีอ็อบเจกต์ใหม่กว่าอยู่แล้ว
วิธีแก้ไข
สำหรับไคลเอนต์หรือผู้เยี่ยมชม
GET resource อีกครั้งเพื่อรับ ETag ปัจจุบัน นำการเปลี่ยนแปลงไปใช้ใหม่ แล้วส่งอีกครั้ง
สำหรับผู้ดูแลเว็บไซต์หรือ API
คืน ETag ปัจจุบัน และทำการตรวจเงื่อนไขแบบ atomic ร่วมกับการเขียน
ตัวอย่างการตอบกลับ
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\"."
} ข้อกำหนด
คำถามที่พบบ่อย
› optimistic concurrency control คืออะไร
ไคลเอนต์ส่ง If-Match พร้อม ETag ที่อ่านมา เซิร์ฟเวอร์ปฏิเสธการเขียนด้วย 412 หาก resource เปลี่ยนไประหว่างนั้น
› 412 หรือ 428
412: เงื่อนไขของคุณไม่เป็นจริง 428: คุณต้องส่งเงื่อนไขมาด้วย