DevToolPal
ไทย
4xx ข้อผิดพลาดฝั่งไคลเอนต์

412 Precondition Failed

เงื่อนไขล่วงหน้าไม่เป็นจริง

ความหมาย

เงื่อนไขใน 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\"."
}

ข้อกำหนด

RFC 9110 §15.5.13

คำถามที่พบบ่อย

› optimistic concurrency control คืออะไร

ไคลเอนต์ส่ง If-Match พร้อม ETag ที่อ่านมา เซิร์ฟเวอร์ปฏิเสธการเขียนด้วย 412 หาก resource เปลี่ยนไประหว่างนั้น

› 412 หรือ 428

412: เงื่อนไขของคุณไม่เป็นจริง 428: คุณต้องส่งเงื่อนไขมาด้วย