อธิบายเมธอดคำขอ HTTP
HTTP กำหนดเมธอดคำขอมาตรฐาน 9 แบบ แต่ทราฟฟิกในชีวิตประจำวันส่วนใหญ่ใช้เพียงไม่กี่แบบ ตารางนี้อธิบายแต่ละเมธอด ว่าปลอดภัยและเป็น idempotent หรือไม่ พร้อมรหัสสถานะที่การเรียกที่สำเร็จส่งกลับมา
| เมธอด | วัตถุประสงค์ | ปลอดภัย? | Idempotent? | สถานะสำเร็จ |
|---|---|---|---|---|
| GET | Retrieve a resource | Yes | Yes | 200 OK |
| HEAD | Retrieve headers only, no body | Yes | Yes | 200 OK |
| POST | Create a resource or trigger an action | No | No | 201 Created |
| PUT | Replace a resource entirely | No | Yes | 200 OK / 204 No Content |
| PATCH | Apply a partial update | No | No | 200 OK |
| DELETE | Remove a resource | No | Yes | 200 OK / 204 No Content |
| OPTIONS | CORS preflight; list allowed methods | Yes | Yes | 204 / 200 OK |
| TRACE | Echo the request back for diagnostics | Yes | Yes | 200 OK |
| CONNECT | Open a tunnel, e.g. HTTPS via a proxy | No | No | 200 OK |
หมายเหตุ
- ปลอดภัย (safe) หมายถึงเมธอดไม่เปลี่ยนสถานะของเซิร์ฟเวอร์ GET, HEAD, OPTIONS และ TRACE เท่านั้นที่ปลอดภัย
- Idempotent หมายถึงการเรียกซ้ำให้ผลลัพธ์เหมือนการเรียกครั้งเดียว PUT, DELETE และ GET เข้าข่าย ส่วน POST และ PATCH ไม่เข้าข่าย
- เมื่อ route ไม่รองรับเมธอดใด เซิร์ฟเวอร์จะตอบ 405 Method Not Allowed และมักมี header Allow แนบมาด้วย
คำถามที่พบบ่อย
- GET กับ POST ต่างกันอย่างไร?
- GET ใช้ดึงทรัพยากรโดยไม่มีผลข้างเคียงและเรียกซ้ำได้อย่างปลอดภัย พารามิเตอร์อยู่ใน URL ส่วน POST ใช้สร้างสิ่งใหม่หรือเรียกให้เกิดการกระทำ อาจเปลี่ยนสถานะ จึงไม่ควรเรียกซ้ำโดยไม่ระวัง
- เมธอด HTTP ที่ 'ปลอดภัย' หมายความว่าอะไร?
- เมธอดที่ปลอดภัยจะไม่เปลี่ยนสถานะของเซิร์ฟเวอร์ จึงเรียกได้โดยไม่เสี่ยง GET, HEAD, OPTIONS และ TRACE ปลอดภัย ส่วน POST, PUT, PATCH และ DELETE ไม่ปลอดภัย
- PUT กับ PATCH ต่างกันอย่างไร?
- PUT แทนที่ทรัพยากรทั้งหมดด้วยข้อมูลที่ส่งไป ส่วน PATCH เปลี่ยนแปลงบางฟิลด์ที่เลือกเท่านั้น PUT เป็น idempotent คือเรียกซ้ำก็ได้ผลเหมือนเดิม ส่วน PATCH โดยทั่วไปไม่เป็น
- เมธอด HEAD ใช้ทำอะไร?
- HEAD ทำงานเหมือน GET แต่ไม่ส่ง body กลับมา ใช้ตรวจสอบว่าทรัพยากรมีอยู่ ขนาดเท่าไร หรือดู header โดยไม่ต้องดาวน์โหลดเนื้อหาทั้งหมด