|
400
|
Bad Request
RFC 9110
|
เซิร์ฟเวอร์ไม่สามารถประมวลผลคำขอได้ เพราะ syntax, parameter, header หรือ body ไม่ถูกต้อง |
พบบ่อยกับ JSON ไม่ถูกต้อง ค่าที่จำเป็นขาดหาย URL ผิดรูปแบบ หรือ header ผิดปกติ |
ตรวจสอบรูปแบบ request body, Content-Type, query parameter และ log validation ของเซิร์ฟเวอร์
เกี่ยวข้อง: 422
|
|
401
|
Unauthorized
RFC 9110
|
ต้องยืนยันตัวตน หรือ credentials ที่ส่งมาไม่ถูกต้อง |
ใช้เมื่อ login token หายไป API key หมดอายุ หรือ header Authorization ไม่ถูกต้อง |
ตรวจสอบ header WWW-Authenticate อายุ token รูปแบบการยืนยันตัวตน และ cookies ถูกส่งหรือไม่
เกี่ยวข้อง: 403, 407
|
|
402
|
Payment Required
RFC 9110
|
สงวนไว้สำหรับกรณีที่ต้องชำระเงิน แต่ความหมายมาตรฐานยังไม่ได้ใช้แพร่หลาย |
API และบริการชำระเงินบางส่วนใช้อย่างไม่เป็นทางการสำหรับปัญหาการชำระเงิน เครดิต หรือ subscription |
ตรวจสอบเอกสาร API ของบริการนั้น ๆ เพื่อดูความหมายจริงของ 402 และวิธีแก้ไข
เกี่ยวข้อง: 403, 429
|
|
403
|
Forbidden
RFC 9110
|
เซิร์ฟเวอร์เข้าใจคำขอ แต่ปฏิเสธไม่ให้เข้าถึง |
พบบ่อยเมื่อสิทธิ์ไม่เพียงพอ ถูกบล็อก IP มีนโยบายผู้ดูแลระบบ หรือเข้าถึงทรัพยากรส่วนตัว |
ตรวจสอบ authorization policy, ACL, กฎ WAF, permission ของไฟล์ และกฎ routing แยกจากการยืนยันตัวตน
เกี่ยวข้อง: 401, 404, 451
|
|
404
|
Not Found
RFC 9110
|
ไม่พบทรัพยากรที่ร้องขอ หรือเซิร์ฟเวอร์ไม่เปิดเผยว่าทรัพยากรนั้นมีอยู่หรือไม่ |
พบบ่อยที่สุดกับ URL พิมพ์ผิด หน้าที่ถูกลบ route ไม่ถูกต้อง หรือทรัพยากรที่ตั้งใจซ่อนไว้ |
ตรวจสอบลิงก์ภายใน sitemap, redirect, ตาราง routing และ URL ทดแทนสำหรับเนื้อหาที่ถูกลบ
เกี่ยวข้อง: 410, 403, 451
|
|
405
|
Method Not Allowed
RFC 9110
|
ทรัพยากรมีอยู่ แต่ HTTP method ที่ร้องขอไม่ได้รับอนุญาต |
เกิดเมื่อส่ง POST ไปยัง URL ที่รองรับเฉพาะ GET หรือเมื่อ API route ถูกตั้งค่าไว้สำหรับ method อื่น |
ตรวจสอบ header Allow, การกำหนด method ใน router และนโยบายจำกัด method ของพร็อกซี
เกี่ยวข้อง: 404, 501
|
|
406
|
Not Acceptable
RFC 9110
|
เซิร์ฟเวอร์ไม่สามารถให้ representation ที่ตรงกับ header Accept ของไคลเอนต์ได้ |
อาจเกิดเมื่อไคลเอนต์ร้องขอเฉพาะ media type, ภาษา หรือ encoding ที่ไม่รองรับ |
ตรวจสอบ header Accept, Accept-Language และ Accept-Encoding รวมถึงการตั้งค่า content negotiation ของเซิร์ฟเวอร์
เกี่ยวข้อง: 415
|
|
407
|
Proxy Authentication Required
RFC 9110
|
ต้องยืนยันตัวตนก่อนที่ไคลเอนต์จะใช้พร็อกซีได้ |
พบในเครือข่ายองค์กร security proxy และสภาพแวดล้อมที่ต้องยืนยันตัวตนผ่าน gateway |
ตรวจสอบ header Proxy-Authenticate และ Proxy-Authorization รวมถึงการตั้งค่าพร็อกซีของเครือข่าย
เกี่ยวข้อง: 401, 305
|
|
408
|
Request Timeout
RFC 9110
|
เซิร์ฟเวอร์ไม่ได้รับคำขอจากไคลเอนต์ครบถ้วนภายในเวลาที่พร้อมจะรอ |
อาจเกิดจากเครือข่ายช้า อัปโหลดขนาดใหญ่ keep-alive timeout หรือ load balancer timeout |
ตรวจสอบพฤติกรรม retry ของไคลเอนต์ ขนาดอัปโหลด การตั้งค่า keep-alive และค่า timeout ของพร็อกซี
เกี่ยวข้อง: 504
|
|
409
|
Conflict
RFC 9110
|
คำขอขัดแย้งกับสถานะปัจจุบันของทรัพยากร |
มักใช้กับการสร้างซ้ำ version conflict การแก้ไขพร้อมกัน หรือการเปลี่ยนสถานะธุรกิจที่ไม่ถูกต้อง |
ตรวจสอบเวอร์ชันทรัพยากร ETags, duplicate key และกฎการเปลี่ยนสถานะทางธุรกิจ
เกี่ยวข้อง: 412, 422
|
|
410
|
Gone
RFC 9110
|
ทรัพยากรเคยมีอยู่ในอดีต แต่ถูกนำออกอย่างถาวรแล้ว |
เฉพาะเจาะจงกว่า 404 เมื่อต้องการบอก search engine และไคลเอนต์อย่างชัดเจนว่าหน้าถูกลบแล้ว |
ใช้ 301 หากมี URL ทดแทน ใช้ 410 พร้อมทำความสะอาด sitemap เมื่อการนำออกถาวรเป็นสิ่งที่ถูกต้อง
เกี่ยวข้อง: 404, 301
|
|
411
|
Length Required
RFC 9110
|
เซิร์ฟเวอร์ปฏิเสธคำขอเพราะไม่มี Content-Length |
อาจเกิดเมื่อเซิร์ฟเวอร์หรือ gateway จำเป็นต้องรู้ความยาวของ request body ล่วงหน้า |
ตรวจสอบ Content-Length, Transfer-Encoding และพฤติกรรม streaming ของ client library
เกี่ยวข้อง: 413
|
|
412
|
Precondition Failed
RFC 9110
|
precondition ในคำขอแบบมีเงื่อนไข เช่น If-Match ล้มเหลว |
ใช้สำหรับป้องกันการแก้ไขพร้อมกัน การ revalidate cache และการอัปเดตที่อิง ETag |
เปรียบเทียบ If-Match, If-None-Match และ If-Unmodified-Since กับเวอร์ชันทรัพยากรปัจจุบัน
เกี่ยวข้อง: 304, 409, 428
|
|
413
|
Content Too Large
RFC 9110
|
request body มีขนาดใหญ่เกินกว่าที่เซิร์ฟเวอร์พร้อมรับ |
พบบ่อยกับขีดจำกัดอัปโหลดไฟล์ ขีดจำกัดขนาด JSON body และข้อจำกัดขนาด body ของพร็อกซี |
ตรวจสอบขีดจำกัดการอัปโหลดในเซิร์ฟเวอร์ พร็อกซี CDN และแอปพลิเคชัน
เกี่ยวข้อง: 411, 431
|
|
414
|
URI Too Long
RFC 9110
|
request URI ยาวเกินกว่าที่เซิร์ฟเวอร์จะประมวลผลได้ |
อาจเกิดกับ query string ยาวมาก redirect loop ที่ผิดพลาด หรือการใส่ข้อมูลมากเกินไปใน URL แบบ GET |
ย้ายข้อมูลยาวไปไว้ใน POST body และตรวจสอบขีดจำกัดความยาว URI ในพร็อกซีและเซิร์ฟเวอร์
เกี่ยวข้อง: 400, 431
|
|
415
|
Unsupported Media Type
RFC 9110
|
เซิร์ฟเวอร์ไม่รองรับ media type ของ request body |
เกิดเมื่อ JSON API ได้รับ Content-Type ผิด หรือมีการอัปโหลดไฟล์รูปแบบที่ไม่รองรับ |
ตรวจสอบ Content-Type, นามสกุลไฟล์ การตั้งค่า multipart และ parser ของเซิร์ฟเวอร์ถูกลงทะเบียนไว้หรือไม่
เกี่ยวข้อง: 406, 422
|
|
416
|
Range Not Satisfiable
RFC 9110
|
ไม่สามารถให้บริการ Range ที่ร้องขอได้ เพราะไม่พอดีกับขนาดของทรัพยากร |
เกิดในการดาวน์โหลดต่อหรือ streaming เมื่อช่วงที่ร้องขออยู่นอกขนาดไฟล์ |
ตรวจสอบ header Range, Content-Range, ขนาดไฟล์ และ metadata จาก cache ที่อาจล้าสมัย
เกี่ยวข้อง: 206
|
|
417
|
Expectation Failed
RFC 9110
|
เซิร์ฟเวอร์ไม่สามารถทำตาม expectation ที่ระบุใน header Expect ได้ |
อาจเกิดเมื่อเซิร์ฟเวอร์หรือพร็อกซีไม่รองรับ expectation เช่น Expect: 100-continue |
นำ header Expect ออก หรือยืนยันว่าเซิร์ฟเวอร์รองรับการจัดการ 100 Continue
เกี่ยวข้อง: 100
|
|
418
|
I'm a teapot
RFC 2324 / RFC 9110
|
รหัสที่มาจาก RFC วัน April Fools' มีความหมายเชิงประวัติศาสตร์และวัฒนธรรมมากกว่าการจัดการข้อผิดพลาดจริง |
บางบริการใช้เพื่อคำตอบแนวสนุก การทดสอบ หรือวัฒนธรรมนักพัฒนา แต่ไม่แนะนำสำหรับการออกแบบ API ทั่วไป |
สำหรับ production API ให้ใช้รหัส 4xx หรือ 5xx ที่ชัดเจนและมีความหมายกำหนดไว้ดี
เกี่ยวข้อง: 400
|
|
421
|
Misdirected Request
RFC 9110
|
คำขอถูกส่งไปยังเซิร์ฟเวอร์ที่ไม่สามารถสร้างการตอบกลับสำหรับคำขอนั้นได้ |
อาจเกิดเมื่อการ reuse connection ของ HTTP/2, TLS/SNI, CDN หรือ reverse proxy routing ตั้งค่าผิด |
ตรวจสอบ Host, SNI, certificate, HTTP/2 connection coalescing และ CDN origin routing
เกี่ยวข้อง: 400, 502
|
|
422
|
Unprocessable Content
RFC 9110
|
syntax ของคำขอถูกต้อง แต่เนื้อหามีความหมายที่ประมวลผลไม่ได้ |
พบบ่อยกับ API validation failure การละเมิด business rule และค่าฟิลด์ไม่ถูกต้อง |
กำหนดในกฎ API ให้ชัดว่า 400 หมายถึงข้อผิดพลาดด้านรูปแบบ และ 422 หมายถึงข้อผิดพลาดเชิงความหมายหรือ validation
เกี่ยวข้อง: 400, 409, 415
|
|
423
|
Locked
RFC 4918
|
ทรัพยากรเป้าหมายถูก lock อยู่ จึงประมวลผลคำขอไม่ได้ |
ใช้กับ file edit lock เอกสารทำงานร่วมกัน และ WebDAV resource lock |
ตรวจสอบเจ้าของ lock อายุของ lock, unlock API และนโยบายจัดการ conflict
เกี่ยวข้อง: 409, 424
|
|
424
|
Failed Dependency
RFC 4918
|
คำขอปัจจุบันทำไม่ได้ เพราะ operation ก่อนหน้าที่ต้องพึ่งพาล้มเหลว |
ใช้เมื่อหลาย operation พึ่งพากัน และความล้มเหลวของ operation ก่อนหน้าทำให้ operation ถัดไปล้มเหลว |
ทำให้ operation ก่อนหน้าที่ล้มเหลวและความสัมพันธ์แบบ dependency ชัดเจนใน body ของการตอบกลับ
เกี่ยวข้อง: 207, 423
|
|
425
|
Too Early
RFC 8470
|
เซิร์ฟเวอร์ปฏิเสธการประมวลผลคำขอที่อาจมาเร็วเกินไปและเสี่ยงต่อการ replay |
ใช้ได้กับ TLS 1.3 0-RTT early data เมื่อมีความเสี่ยง replay attack |
ตรวจให้แน่ใจว่า non-idempotent request ไม่ถูกส่งด้วย 0-RTT และตรวจสอบการตั้งค่าไคลเอนต์กับเซิร์ฟเวอร์
เกี่ยวข้อง: 429, 503
|
|
426
|
Upgrade Required
RFC 9110
|
เซิร์ฟเวอร์ต้องการให้ไคลเอนต์อัปเกรดโปรโตคอลก่อนจึงจะจัดการคำขอ |
ใช้เมื่อจำเป็นต้องมีการอัปเกรดเฉพาะ เช่น เวอร์ชัน HTTP, TLS หรือ WebSocket |
ตรวจสอบ header Upgrade โปรโตคอลที่รองรับ และพร็อกซีส่งต่อคำขอ upgrade หรือไม่
เกี่ยวข้อง: 101
|
|
428
|
Precondition Required
RFC 6585
|
เซิร์ฟเวอร์ต้องการ header คำขอแบบมีเงื่อนไข |
ใช้เพื่อป้องกัน lost update จากการแก้ไขพร้อมกัน โดยกำหนดเงื่อนไข เช่น If-Match |
จัดทำเอกสาร API และข้อความ error ที่บอกไคลเอนต์ให้อ่าน ETag แล้วอัปเดตด้วย If-Match
เกี่ยวข้อง: 412, 409
|
|
429
|
Too Many Requests
RFC 6585
|
ไคลเอนต์ส่งคำขอมากเกินไปภายในช่วงเวลาที่กำหนด |
พบบ่อยกับ API rate limit, ขีดจำกัดความพยายามล็อกอิน การบล็อก bot และพฤติกรรม refresh มากเกินไป |
ตรวจสอบ Retry-After, header rate limit, ขีดจำกัดรายผู้ใช้หรือราย token และกลยุทธ์ backoff
เกี่ยวข้อง: 403, 503
|
|
431
|
Request Header Fields Too Large
RFC 6585
|
header ของคำขอโดยรวมหรือ field header บางตัวมีขนาดใหญ่เกินไป |
อาจเกิดเมื่อ cookie ใหญ่เกินไป หรือ token ยืนยันตัวตน tracking header หรือ header ที่พร็อกซีเพิ่มสะสมกันมากขึ้น |
ลดขนาด Cookie, ขนาด header Authorization และ header ที่ถูกเพิ่มโดย proxy chain
เกี่ยวข้อง: 400, 413, 414
|
|
451
|
Unavailable For Legal Reasons
RFC 7725
|
ไม่สามารถให้บริการทรัพยากรได้ด้วยเหตุผลทางกฎหมาย |
ใช้เมื่อการเข้าถึงเนื้อหาถูกจำกัดด้วยคำสั่งศาล คำขอจากรัฐ หนังสือแจ้งลิขสิทธิ์ หรือกฎระเบียบท้องถิ่น |
ยืนยันว่ารหัสนี้ถูกใช้เพื่อระบุข้อกำหนดทางกฎหมายอย่างโปร่งใส ไม่ใช่ 403 หรือ 404 แบบทั่วไป
เกี่ยวข้อง: 403, 404, 410
|