ใน HTML Form มี 2 เมธอดหลักสำหรับส่งข้อมูลไปยังเซิร์ฟเวอร์: GET และ POST ซึ่งแตกต่างกันในหลายด้าน
ตารางเปรียบเทียบ
| ด้าน | GET | POST |
|---|---|---|
| ตำแหน่งข้อมูล | อยู่ใน URL (Query String) | อยู่ใน Request Body |
| วัตถุประสงค์หลัก | ดึงข้อมูล (Retrieve/Read) | ส่ง/อัปเดตข้อมูล (Create/Update) |
| Bookmark/Share | ได้ (URL มีพารามิเตอร์ครบ) | ไม่ได้ (ข้อมูลอยู่ใน Body) |
| ความปลอดภัย | ต่ำ - ข้อมูลเห็นใน URL, History, Logs | สูงกว่า - ข้อมูลไม่เห็นใน URL |
| ขนาดข้อมูล | จำกัด ~2000 ตัวอักษร (URL length limit) | ใหญ่กว่ามาก (~8 MB ขึ้นไป ขึ้นกับ Server) |
| ชุดอักขระ | ASCII เท่านั้น (ต้อง URL Encode) | รองรับทุกอักขระ (Binary, Unicode) |
| Caching | Cache ได้ (อาจก่อปัญหา) | ไม่ Cache (ปลอดภัยกว่า) |
| Back/Reload | ปลอดภัย (Idempotent) | อาจส่งซ้ำ (Browser จะเตือน) |
| การเชื่อมต่อ Server | 1 ครั้ง | 2 ครั้ง (บางกรณี Preflight) |
| SEO | เหมาะสำหรับ Search Engine | ไม่เหมาะ (Crawler ไม่ส่ง POST) |
ตัวอย่าง URL
GET: https://example.com/search?q=keyword&page=1
POST: https://example.com/login (ข้อมูลอยู่ใน Body: username=john&password=secret)
เมื่อไหร่ควรใช้เมธอดไหน?
ใช้ GET เมื่อ:
- ค้นหา/กรองข้อมูล (Search, Filter)
- แบ่งหน้า (Pagination)
- ต้องการให้ผู้ใช้ Bookmark/Share URL ได้
- การดึงข้อมูลที่ไม่เปลี่ยนแปลงสถานะ (Idempotent)
- SEO สำคัญ
ใช้ POST เมื่อ:
- ล็อกอิน/สมัครสมาชิก (Credentials)
- ส่งฟอร์มที่มีข้อมูลส่วนตัว/ละเอียดอ่อน
- อัปโหลดไฟล์
- สร้าง/แก้ไข/ลบข้อมูล (Non-idempotent)
- ข้อมูลขนาดใหญ่หรือ Binary
แนวทางปฏิบัติที่ดี (Best Practices)
- ไม่เคยส่งรหัสผ่าน/Token ด้วย GET
- ใช้ HTTPS ทุกกรณี (เข้ารหัสทั้ง GET และ POST)
- ใช้ CSRF Token สำหรับ POST Form
- ตั้งค่า
autocomplete="off"สำหรับฟิลด์ละเอียดอ่อน