404 คงจะเป็นรหัสสามตัวที่คุ้นเคยกันมากที่สุด และ 200 OK ก็คงเป็นรหัสที่นักพัฒนาอย่างเรา ๆ อยากเห็นมากที่สุด
รหัสตอบกลับจาก HTTP พวกนี้มีตั้งแต่ 1XX, 2XX ไปเรื่อย ๆ จนถึง 5XX แต่มันมีความหมายว่าอะไรกันบ้าง มาลองดูกันว่าเลขพวกนี้ในรูปแบบของภาษาคนแปลว่าอะไร
วิธีอ่านบทความนี้ก็คือให้มองว่าเรากำลังคุยกับเซิร์ฟเวอร์อยู่ ส่งคำขออะไรสักอย่างไปให้และก็ได้ตัวเลขสามตัวตอบกลับมา
2XX: Success
เริ่มที่ 2XX ที่เป็นหมวด Success หรือคำขอที่ส่งไปทำได้สำเร็จแล้ว มีตัวที่น่าสนใจดังนี้
- 200 OK: ทำตามคำขอของเราสำเร็จเรียบร้อยแล้ว เช่น ถ้าส่ง GET ไปขอข้อมูลก็แสดงว่า ได้ส่งข้อมูลกลับมาใน Body ให้แล้ว หรือถ้าส่ง PUT ไปแก้ไขข้อมูลก็แสดงว่าแก้ไขให้เรียบร้อยแล้ว
- 201 Created: ทำตามคำขอที่ให้ไปสร้างอะไรสักอย่างสำเร็จ เช่น ส่ง POST ไปเพิ่มข้อมูล ถ้าได้เลขตัวนี้แสดงว่าเพิ่มข้อมูลเข้าไปให้แล้ว
- 202 Accepted: รับคำร้องของเราไว้ให้เรียบร้อยแล้ว แต่ไม่ทรา บว่าคำขอนั้นจัดการให้เรียบร้อยหรือเปล่า ส่วนใหญ่จะพบในคำขอที่ไม่สามารถประมวลผลได้ทันที หรือประมาณว่ารับเรื่องไว้ให้แล้ว แต่ยังไม่ได้ดำเนินการ
3XX: Redirection
ต่อด้วย 3XX ที่เป็นการบอกว่ามีการย้ายที่หรือ Redirection ต้องไปอีกต่อหนึ่งถึงจะไปถึงปลายทางที่ขอ
- 300 Multiple Choices: บอกว่ามีหลายทางให ้เลือกไปต่อ จะเป็นเช่นขอไฟล์อาจมีให้เลือกว่าจะรับไฟล์ในรูปแบบใด แต่ไม่ได้มีการกำหนดมาตรฐานว่าจะส่งกลับไปให้ผู้ใช้เลือกอย่างไร รหัสนี้เลยไม่ค่อยเป็นที่นิยมใช้งานมากนัก
- 307 Temporary Redirect: บอกให้ส่งคำขอไปอีกที่หนึ่ง แต่ว่าย้ายไปชั่วคราวเท่านั้น ในการเรียกร้อบหน้าให้มาเรียกที่นี่ที่เดิม
- 308 Permanent Redirect: บอกให้ส่งคำขอไปอีกที่เช่นกัน แต่ว่าย้ายไปถาวรเลย รอบหน้าให้ตามไปเรียกที่ใหม่ได้เลย
รหัสที่คล้าย 307 และ 308 จะเป็น 301 Moved Permanently และ 302 Found (Moved Temporarily) แต่ 307, 308 เป็นเวอร์ชันที่เข้มงวดกว่าที่จะไม่ยอมให้เปลี่ยน Request Method ในการส่งคำขอในต่อถัดไป
4XX: Client Error
มาถึงรหัสที่แสดงถึงความผิดพลาดอย่าง 4XX บ้าง ตัวนี้เป็นการบอกว่าความผิดพลาดมาจากฝั่งเราที่เป็นคนเรียก
- 400 Bad Request: เซิร์ฟเวอร์ไม่สามารถเข้าใจสิ่งที่เรา(ผู้ส่งคำขอ)ส่งไปได้ เช่น ส่ง JSON ไปแล้วลืมปีกกาตัวนึง ทำให้ผิด Syntax ไม่สามารถอ่านได้
- 401 Unauthorized: ถึงแม้จะชื่อนี้แต่ความหมายจริง ๆ คือ Unauthenticated ที่ผู้ใช้จะต้องระบุตัวตน ผ่านการเข้าสู่ระบบ หรืออื่น ๆ ก่อนจะเข้าถึงส่วนนี้
- 403 Forbidden: รหัสนี้เป็นตัวที่มีความหมายว่า Unauthorized อย่างแท้จริง ก็ค ือการที่รู้ตัวตนของผู้ใช้ แต่ว่าไม่มีสิทธิ์จะเข้าถึงส่วนนี้
- 404 Not Found: ตรงนี้แปลได้ตรงตัวว่าหาไม่เจอ เช่น URL ที่กรอกมาไม่มีอยู่จริง หรือข้อมูลที่เรียกดูไม่มีในระบบ
- 405 Method Not Allowed: ตัวเซิร์ฟเวอร์ไม่รองรับ Request Method ที่ส่งมา และไม่สามารถดำเนินการให้ได้ เช่น รับแค่ GET กับ POST เท่านั้น
- 418 I'm a teapot
- 422 Unprocessable Entity: คล้ายกับ 400 แต่ต่างกันที่เซิร์ฟเวอร์อ่านข้อมูลได้ แต่ว่าเอาไปดำเนินการต่อไม่ได้ เพราะข้อมูลที่ส่งมาไม่ถูกต้อง จะเป็นพวก Validation Error เช่น กรอกอายุมาเป็นตัวหนังสือ, กรอกวันที่ผิดรูปแบบ
5XX: Server Error
และสุดท้ายสำหรับ 5XX ที่เป็นความผิดพลาดมาจากฝั่งเซิร์ฟเวอร์เลย
- 500 Internal Server Error: เกิดข้อผิดพลาดขึ้นตอนกำลังประมวลผลคำขอของเรา ส่วนใหญ่จะเป็นจุดที่ไม่ได้คาดคิด เลยไม่ได้เขียนป้องกันไว้จนเกิดเป็นข้อผิดพลาดในที่สุด
- 502 Bad Gateway: บางครั้งจะมีเซิร์ฟเวอร์มาคั่นกลางก่อนจะพาไปถึงเซิร์ฟเวอร์จริง ๆ ที่จะรับคำขอของเรา แต่ว่าถ้าตัวกลางนั้นพาเราไปไม่ถึงที่หมาย ก็จะได้เลขนี้กลับมาปลอบใจแทน ส่วนนี้เป็นได้ทั้งความผิดพลาดของเซิร์ฟเวอร์ตัวกลางที่ตั้งค่าผิด หรือเป็นที่เซิร์ฟเวอร์ผลาญทางที่ทำงานผิดพลาด
- 503 Service Unavailable: เซิร์ฟเวอร์ไม่พร้อมที่จะรับคำขอของเรา เนื่องจากปิดปรับปรุงอยู่ หรือไม่ก็รับคำขอเยอะไปจนไม่ไหวแล้ว
- 504 Gateway Timeout: ตัวนี้คล้ายกับ 502 แต่ว่าจะเป็นการที่เซิร์ฟเวอร์ตัวกลางพยายามติดต่อเซิร์ฟเวอร์ปลายทางแล้ว แต่ไม่มีการตอบกลับใด ๆ
เมื่อทราบแล้วว่าแต่ละเลขมีความหมายอะไรบ้าง ฝั่งคนเรียกก็ต้องรับมือแต่ละเลขให้ถูกต้อง ส่วนฝั่งเซิร์ฟเวอร์ก็อย่าลืม ส่งเลขให้ถูกต้อง ไม่งั้นเซิร์ฟเวอร์ของเราจะพูดเป็นแค่ 200 กับ 500 ที่ก็คงจะลำบากคนเรียกไม่ใช่น้อย
เนื้อหานี้ถูกเผยแพร่ครั้งแรกในรูปแบบของโพสท์ Facebook เพื่อให้ง่ายต่อการสืบค้นจึงนำมาจัดเก็บในรูปแบบบทความด้วย