รหัสสถานะ 406 Not Acceptable คืออะไร: โปรโตคอลจู้จี้จุกจิก

INEZA Felin-Michel

INEZA Felin-Michel

30 September 2025

รหัสสถานะ 406 Not Acceptable คืออะไร: โปรโตคอลจู้จี้จุกจิก

ในคลังคำศัพท์อันหลากหลายของรหัสสถานะ HTTP มีรหัสบางตัวที่โดดเด่นกว่ารหัสอื่น ๆ ในขณะที่บางรหัสก็ทำหน้าที่สำคัญอย่างเงียบ ๆ ในการรับรองการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่ราบรื่น รหัสสถานะ 406 Not Acceptable เป็นหนึ่งในฮีโร่ที่ไม่ค่อยมีใครรู้จักนี้ อาจไม่ปรากฏบ่อยเท่า 404 หรือ 500 ยอดนิยม แต่การทำความเข้าใจวัตถุประสงค์ของมันสามารถปรับปรุงความเข้าใจของคุณเกี่ยวกับการเจรจาต่อรองเนื้อหาได้อย่างมาก และเพิ่มความยืดหยุ่นของเว็บแอปพลิเคชันและ API ของคุณ

รหัสสถานะ 406 Not Acceptable อาจให้ความรู้สึกเหมือนข้อความลึกลับจากเซิร์ฟเวอร์ของคุณ แต่เมื่อคุณเข้าใจความหมายของมันแล้ว มันจะกลายเป็นสัญญาณอันทรงพลังที่ช่วยให้คุณออกแบบ API ที่สะอาดขึ้น คาดเดาได้มากขึ้น และใช้งานง่ายขึ้น

รหัสสถานะนี้แสดงถึงการสื่อสารที่ล้มเหลวในกระบวนการเจรจาต่อรองเนื้อหาที่ซับซ้อน ซึ่งไคลเอนต์และเซิร์ฟเวอร์ตกลงกันในรูปแบบที่ดีที่สุดสำหรับการแลกเปลี่ยนข้อมูล

ในบล็อกโพสต์นี้ เราจะเจาะลึกความหมายของ HTTP 406 Not Acceptable สาเหตุที่เกิดขึ้น วิธีที่การเจรจาต่อรองเนื้อหามีอิทธิพลต่อมัน และวิธีที่คุณในฐานะนักพัฒนาหรือผู้ใช้ API สามารถจัดการกับมันได้อย่างมีประสิทธิภาพ การดีบักข้อผิดพลาดแปลกๆ เช่น 406 Not Acceptable อาจใช้เวลานานหากไม่มีเครื่องมือที่เหมาะสม นั่นคือเหตุผลที่ฉันแนะนำ Apidog เป็นแพลตฟอร์ม API แบบครบวงจรฟรีที่ช่วยให้คุณ ออกแบบ, จำลอง, ทดสอบ, ดีบัก และ จัดทำเอกสาร API ได้อย่างง่ายดาย คุณจึงรู้ได้อย่างแน่ชัดว่าทำไมคุณถึงได้รับ 406 และวิธีแก้ไขอย่างรวดเร็ว

💡
หากคุณต้องการสำรวจและทดสอบ API ได้อย่างราบรื่น รวมถึงการตอบสนองด้วยสถานะ 406 ให้ดาวน์โหลด Apidog ฟรี Apidog เป็นเครื่องมือทดสอบและจัดทำเอกสาร API ที่จำเป็น ซึ่งทำให้การตรวจสอบรหัสสถานะ HTTP เช่น 406 เป็นเรื่องง่ายและมีประสิทธิภาพ
button

ตอนนี้ เรามาสำรวจโลกของการเจรจาต่อรองเนื้อหาและรหัสสถานะ HTTP 406 Not Acceptable กัน

ปัญหา: ทุกคนต้องการข้อมูลในแบบของตัวเอง

ในยุคแรกเริ่มของเว็บ เซิร์ฟเวอร์มักจะนำเสนอรูปแบบเดียวสำหรับทรัพยากรของตน ซึ่งมักจะเป็น HTML แต่เมื่อเว็บพัฒนาขึ้น ไคลเอนต์ที่แตกต่างกันก็เกิดขึ้นมาพร้อมกับความต้องการที่แตกต่างกัน:

รหัสสถานะ 406 มีอยู่เนื่องจากบางครั้งไคลเอนต์ร้องขอรูปแบบที่เซิร์ฟเวอร์ไม่สามารถจัดหาให้ได้สำหรับทรัพยากรนั้น ๆ

HTTP 406 Not Acceptable หมายความว่าอย่างไรกันแน่?

รหัสสถานะ 406 Not Acceptable บ่งชี้ว่าเซิร์ฟเวอร์ไม่สามารถสร้างการตอบสนองที่ตรงกับรายการค่าที่ยอมรับได้ที่กำหนดไว้ในส่วนหัวการเจรจาต่อรองเนื้อหาเชิงรุกของคำขอ และเซิร์ฟเวอร์ไม่เต็มใจที่จะจัดหารูปแบบเริ่มต้น

พูดง่ายๆ คือ: "คุณบอกฉันอย่างชัดเจนว่าคุณจะยอมรับรูปแบบใดบ้าง และฉันไม่สามารถจัดหาทรัพยากรในรูปแบบเหล่านั้นได้เลย"

การตอบสนอง 406 ที่เหมาะสมควรรวมข้อมูลเกี่ยวกับรูปแบบที่เซิร์ฟเวอร์ สามารถ จัดหาให้ได้สำหรับทรัพยากรที่ร้องขอ โดยทั่วไปจะทำได้ด้วยส่วนหัวหรือในเนื้อหาการตอบสนอง

นี่คือลักษณะของการตอบสนอง 406:

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 Not Acceptable</title></head><body><h1>Not Acceptable</h1><p>This resource is available in the following formats:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

สำหรับ API การส่งคืนการตอบสนองที่มีโครงสร้างจะมีประโยชน์มากกว่า:

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "The requested resource is not available in the requested format.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

มันไม่เกี่ยวกับว่าคำขอถูกต้องหรือไม่ มันเกี่ยวกับว่าประเภทการตอบสนองเป็นที่ยอมรับได้หรือไม่

ความมหัศจรรย์ของการเจรจาต่อรองเนื้อหา: ส่วนหัว Accept ทำงานอย่างไร

เพื่อให้เข้าใจ 406 เราจำเป็นต้องเข้าใจว่าไคลเอนต์บอกเซิร์ฟเวอร์ว่าพวกเขาต้องการรูปแบบใด นี่คือสิ่งที่เกิดขึ้นผ่านส่วนหัว Accept

ส่วนหัว Accept ในการทำงาน

เมื่อไคลเอนต์ทำการร้องขอ มันสามารถระบุประเภทเนื้อหาที่สามารถจัดการได้และประเภทที่ต้องการ:

ตัวอย่างง่ายๆ:

GET /api/users/123 HTTP/1.1Accept: application/json

นี่หมายถึง: "ฉันต้องการข้อมูลผู้ใช้ และฉันเข้าใจเฉพาะ JSON เท่านั้น"

ตัวอย่างที่ซับซ้อนกว่า:

GET /api/users/123 HTTP/1.1Accept: application/json, text/html;q=0.9, application/xml;q=0.8

นี่หมายถึง: "ฉันชอบ JSON แต่ฉันก็สามารถจัดการ HTML (ด้วยความชอบ 90%) และ XML (ด้วยความชอบ 80%) ได้เช่นกัน"

พารามิเตอร์ q (ค่าคุณภาพ) มีช่วงตั้งแต่ 0 ถึง 1 โดย 1 คือค่าที่ต้องการมากที่สุด

เมื่อการเจรจาต่อรองล้มเหลว

ข้อผิดพลาด 406 เกิดขึ้นเมื่อเซิร์ฟเวอร์ดูส่วนหัว Accept และตระหนักว่า:

  1. มีทรัพยากรที่ไคลเอนต์ต้องการ
  2. ไม่สามารถจัดหาให้ในรูปแบบใด ๆ ที่ไคลเอนต์ระบุ
  3. ไม่เต็มใจที่จะส่งรูปแบบเริ่มต้น (เช่น การส่ง JSON ไปยังไคลเอนต์ที่ยอมรับเฉพาะ XML)

406 Not Acceptable เข้ากับการเจรจาต่อรองเนื้อหาได้อย่างไร?

เมื่อไคลเอนต์ส่งคำขอ HTTP ที่รวมส่วนหัว Accept ซึ่งระบุประเภทสื่อที่ยอมรับได้ (เช่น การร้องขอการตอบกลับ JSON เท่านั้น) เซิร์ฟเวอร์จะพยายามส่งเนื้อหาตามนั้น

หากเซิร์ฟเวอร์ ไม่สามารถ จัดหาเนื้อหาที่ยอมรับได้ซึ่งตรงตามเกณฑ์ใดๆ ก็จะตอบกลับด้วย:

textHTTP/1.1 406 Not Acceptable Content-Type: text/html

ณ จุดนี้ หมายความว่าเซิร์ฟเวอร์ปฏิเสธคำขอเนื่องจาก ไม่มีการแสดงเนื้อหาที่มีอยู่ใดๆ ที่ตรงกับความต้องการของไคลเอนต์

ทำไมเซิร์ฟเวอร์จึงส่งคืน 406 แทนที่จะเป็น 200 OK

คุณอาจคิดว่า: ทำไมไม่ส่งคืนอะไรบางอย่าง แม้ว่ามันจะไม่ใช่รูปแบบที่ต้องการก็ตาม?

นี่คือเหตุผลที่เซิร์ฟเวอร์ส่งคืน 406:

สาเหตุทั่วไปของการตอบสนอง 406

นี่คือสาเหตุทั่วไปบางประการที่คุณจะเห็น 406 Not Acceptable:

สถานการณ์จริงที่ทำให้เกิดข้อผิดพลาด 406

1. ความขัดแย้งในการกำหนดเวอร์ชัน API

ลองจินตนาการถึง API ที่ให้บริการ JSON ใน v2 เท่านั้น แต่ไคลเอนต์ยังคงคาดหวัง XML จากยุค v1:

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "This API version only supports JSON",
  "available_formats": ["application/json"]
}

2. การกำหนดค่าไคลเอนต์ที่จำกัดมากเกินไป

แอปพลิเคชันมือถืออาจถูกฮาร์ดโค้ดให้ยอมรับเฉพาะ JSON แต่พบเซิร์ฟเวอร์ที่ให้บริการทรัพยากรบางอย่างเป็น XML เท่านั้น:

GET /reports/quarterly-sales HTTP/1.1Accept: application/jsonHTTP/1.1 406 Not Acceptable

(รายงานอาจมีให้ในรูปแบบ CSV หรือ PDF เท่านั้น)

3. ไม่มีกลไกสำรองเริ่มต้น

เซิร์ฟเวอร์บางตัวได้รับการกำหนดค่าให้เข้มงวดเกี่ยวกับการเจรจาต่อรองเนื้อหาและปฏิเสธที่จะเดารูปแบบที่จะส่งคืนเมื่อการเจรจาต่อรองล้มเหลว

โดยปกติเซิร์ฟเวอร์จัดการ 406 อย่างไร?

ที่น่าสนใจคือ เซิร์ฟเวอร์บางตัวไม่สนใจการเจรจาต่อรองเนื้อหาที่เข้มงวดและกลับไปใช้การตอบสนองเริ่มต้น แทนที่จะตอบกลับด้วย 406

อย่างไรก็ตาม API หรือบริการ RESTful ที่เข้มงวดซึ่งเน้นการสื่อสารที่แม่นยำอาจส่งคืน 406 เมื่อไม่สามารถตอบสนองความต้องการของไคลเอนต์ได้

406 Not Acceptable เทียบกับรหัสสถานะที่เกี่ยวข้อง

เพื่อชี้แจงบทบาทของ 406 เรามาดูสถานะ HTTP ที่เกี่ยวข้อง:

รหัสสถานะ ความหมาย ควรใช้เมื่อใด
400 Bad Request ไวยากรณ์ผิดพลาดหรือคำขอไม่ถูกต้อง ไม่สามารถเข้าใจคำขอได้
406 Not Acceptable คำขอถูกต้อง แต่เซิร์ฟเวอร์ไม่สามารถตอบสนองส่วนหัว accept ได้ การเจรจาต่อรองเนื้อหาล้มเหลว
415 Unsupported Media Type เซิร์ฟเวอร์ไม่สามารถประมวลผลประเภทเนื้อหาที่ไคลเอนต์ส่งมาได้ ประเภทสื่อของเนื้อหาคำขอไม่ถูกต้อง
ความแตกต่างระหว่าง 406 กับ 415 406 เกี่ยวข้องกับประเภทการตอบสนอง, 415 เกี่ยวข้องกับประเภทเนื้อหาคำขอ

ไคลเอนต์ควรจัดการกับการตอบสนอง 406 อย่างไร?

ไคลเอนต์ที่ได้รับ 406 ควรกระทำดังนี้:

นักพัฒนาสามารถทำอะไรได้บ้างเพื่อหลีกเลี่ยงหรือจัดการ 406?

หน้าข้อผิดพลาดและข้อความ 406 ที่กำหนดเอง

สำหรับเว็บไซต์และ API การแสดงข้อผิดพลาด 406 ที่มีความหมายและเป็นประโยชน์ช่วยปรับปรุงประสบการณ์ของนักพัฒนาและผู้ใช้:

การทดสอบการเจรจาต่อรองเนื้อหาด้วย Apidog

Apidog Promotion Material

การทดสอบว่า API ของคุณจัดการส่วนหัว Accept ที่แตกต่างกันอย่างไรนั้นสำคัญอย่างยิ่งสำหรับการสร้างแอปพลิเคชันที่แข็งแกร่ง Apidog ทำให้กระบวนการนี้ตรงไปตรงมาและมีประสิทธิภาพ

ด้วย Apidog คุณสามารถ:

  1. แก้ไขส่วนหัวได้อย่างง่ายดาย: เพิ่มและแก้ไขส่วนหัว Accept ได้อย่างรวดเร็วเพื่อทดสอบว่าเซิร์ฟเวอร์ของคุณตอบสนองต่อคำขอประเภทเนื้อหาที่แตกต่างกันอย่างไร
  2. ทดสอบหลายรูปแบบ: สร้างชุดการทดสอบสำหรับปลายทางเดียวกันด้วยส่วนหัว Accept ที่แตกต่างกัน (JSON, XML, HTML) เพื่อให้ครอบคลุมอย่างทั่วถึง
  3. ตรวจสอบการตอบสนอง 406: จงใจส่งส่วนหัว Accept ที่จำกัดเพื่อตรวจสอบว่าเซิร์ฟเวอร์ของคุณส่งคืนการตอบสนอง 406 ที่เหมาะสมพร้อมข้อมูลข้อผิดพลาดที่เป็นประโยชน์
  4. ทำให้การทดสอบการเจรจาต่อรองเนื้อหาเป็นไปโดยอัตโนมัติ: สร้างชุดการทดสอบที่ตรวจสอบโดยอัตโนมัติว่า API ของคุณจัดการคำขอประเภทเนื้อหาต่างๆ ได้อย่างถูกต้องและส่งคืนรหัสสถานะที่เหมาะสม
  5. ดีบักสถานการณ์ที่ซับซ้อน: ใช้บันทึกโดยละเอียดของ Apidog เพื่อทำความเข้าใจว่าทำไมข้อผิดพลาด 406 จึงเกิดขึ้น และเซิร์ฟเวอร์รองรับรูปแบบใดบ้าง
button

แนวทางที่เป็นระบบนี้ช่วยให้มั่นใจว่า API ของคุณสามารถจัดการกับไคลเอนต์ที่มีข้อกำหนดรูปแบบที่แตกต่างกันได้อย่างราบรื่น กล่าวโดยย่อ: แทนที่จะคลำหาในที่มืด คุณจะรู้ได้อย่างแน่ชัดว่าอะไรเป็นที่ยอมรับ ดาวน์โหลด Apidog ฟรีและเพิ่มประสิทธิภาพในการแก้ไขปัญหาการเจรจาต่อรองเนื้อหาและสถานการณ์ 406

แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการข้อผิดพลาด 406

สำหรับนักพัฒนาเซิร์ฟเวอร์:

  1. ให้ข้อมูลข้อผิดพลาดที่เป็นประโยชน์: เมื่อส่งคืน 406 ควรรวมข้อมูลเกี่ยวกับรูปแบบที่คุณ รองรับ เสมอ ซึ่งจะช่วยให้นักพัฒนาไคลเอนต์แก้ไขคำขอของตนได้
  2. ใช้ส่วนหัว Vary: รวมส่วนหัว Vary: Accept ในการตอบสนองของคุณเพื่อระบุว่าเนื้อหาการตอบสนองแตกต่างกันไปตามส่วนหัว Accept สิ่งนี้ช่วยให้ระบบแคชทำงานได้อย่างถูกต้อง
  3. พิจารณาพฤติกรรมเริ่มต้น: แม้ว่าข้อกำหนด HTTP จะอนุญาตให้เซิร์ฟเวอร์ส่งคืนรูปแบบเริ่มต้น แต่ API สมัยใหม่จำนวนมากเลือกที่จะเข้มงวดและส่งคืน 406 เพื่อบังคับให้ไคลเอนต์ระบุความต้องการของตนอย่างชัดเจน
  4. จัดทำเอกสารรูปแบบที่รองรับ: จัดทำเอกสารประเภทเนื้อหาที่ API ของคุณรองรับสำหรับแต่ละปลายทางอย่างชัดเจน

สำหรับนักพัฒนาไคลเอนต์:

  1. มีความยืดหยุ่นในส่วนหัว Accept: เว้นแต่คุณมีเหตุผลเฉพาะ ควรรวมหลายรูปแบบในส่วนหัว Accept ของคุณด้วยค่าคุณภาพที่เหมาะสม
  2. จัดการ 406 อย่างสง่างาม: เมื่อคุณได้รับ 406 ให้ตรวจสอบการตอบสนองสำหรับรูปแบบที่มีอยู่ และปรับคำขอของคุณ หรือแสดงข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์แก่ผู้ใช้
  3. มีตรรกะสำรอง: พิจารณามีตรรกะสำรองที่สามารถจัดการรูปแบบที่แตกต่างกันได้ หากรูปแบบที่ต้องการหลักของคุณไม่พร้อมใช้งาน

ฮีโร่ผู้ไม่ได้รับการยกย่องของการเจรจาต่อรองเนื้อหา

ส่วนหัว Vary มีความสำคัญอย่างยิ่งต่อพฤติกรรมการแคชที่เหมาะสมเมื่อมีการเจรจาต่อรองเนื้อหา เมื่อเซิร์ฟเวอร์รวม Vary: Accept ในการตอบสนอง จะเป็นการบอกแคชว่าเนื้อหาการตอบสนองขึ้นอยู่กับค่าส่วนหัว Accept

สิ่งนี้จะป้องกันไม่ให้แคชให้บริการการตอบสนอง JSON แก่ไคลเอนต์ที่ร้องขอ XML หรือในทางกลับกันอย่างไม่ถูกต้อง

ผลกระทบต่อ SEO ของการตอบสนอง 406

โดยทั่วไปแล้ว 406 ไม่ส่งผลกระทบต่อ SEO อย่างมีนัยสำคัญ เนื่องจากเครื่องมือค้นหามักจะจัดการการเจรจาต่อรองเนื้อหาอย่างแข็งแกร่งและชอบการตอบสนองที่ถูกต้อง อย่างไรก็ตาม API หรือเว็บไซต์ที่กำหนดค่าไม่ถูกต้องซึ่งส่งคืน 406 บ่อยครั้งอาจทำให้โปรแกรมรวบรวมข้อมูลหรือผู้ใช้ไม่พอใจ

การออกแบบ API สมัยใหม่และ 406

ในการออกแบบ API แบบ RESTful สมัยใหม่ การใช้ 406 ได้พัฒนาขึ้น:

อย่างไรก็ตาม 406 ยังคงมีความเกี่ยวข้องสำหรับ:

การแก้ไขปัญหาข้อผิดพลาด 406

ข้อควรพิจารณาด้านความปลอดภัยเกี่ยวกับ 406

สรุป: การยอมรับ HTTP 406 Not Acceptable เพื่อการสื่อสารที่แม่นยำ

รหัสสถานะ HTTP 406 Not Acceptable แสดงถึงหลักการสำคัญของสถาปัตยกรรมเว็บ: การสื่อสารที่ชัดเจนระหว่างไคลเอนต์และเซิร์ฟเวอร์เกี่ยวกับความสามารถและความต้องการของพวกเขา ไม่ใช่ข้อผิดพลาดที่ต้องกลัว แต่เป็นกลไกเพื่อให้แน่ใจว่าการแลกเปลี่ยนข้อมูลเกิดขึ้นในรูปแบบที่เข้าใจร่วมกันได้

แม้ว่าคุณอาจไม่พบ 406 ทุกวัน แต่การทำความเข้าใจมันจะทำให้คุณเป็นพลเมืองเว็บที่ดีขึ้น มันสอนความสำคัญของการระบุข้อกำหนดรูปแบบข้อมูลอย่างชัดเจนและการจัดการการเจรจาต่อรองรูปแบบอย่างสง่างาม

สำหรับนักพัฒนา API การใช้งานการเจรจาต่อรองเนื้อหาและการตอบสนอง 406 อย่างเหมาะสมจะนำไปสู่ API ที่แข็งแกร่งและยืดหยุ่นมากขึ้น สำหรับนักพัฒนาไคลเอนต์ การทำความเข้าใจวิธีจัดการกับข้อผิดพลาด 406 ช่วยให้มั่นใจว่าแอปพลิเคชันของคุณสามารถปรับให้เข้ากับความสามารถของเซิร์ฟเวอร์ที่แตกต่างกันได้

ในโลกที่ข้อมูลจำเป็นต้องไหลเวียนระหว่างระบบและแพลตฟอร์มที่หลากหลาย ความสามารถในการเจรจาต่อรองรูปแบบเนื้อหามีคุณค่ามากกว่าที่เคย และเมื่อคุณต้องการทดสอบและทำให้การเจรจาต่อรองเหล่านี้สมบูรณ์แบบ เครื่องมืออย่าง Apidog มอบสภาพแวดล้อมที่สมบูรณ์แบบเพื่อให้แน่ใจว่าแอปพลิเคชันของคุณสื่อสารได้อย่างมีประสิทธิภาพ โดยไม่คำนึงถึงความชอบรูปแบบ

button

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API