Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

ความแตกต่างระหว่าง GET และ POST Method ใน HTML Form

ใน 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)

  1. ไม่เคยส่งรหัสผ่าน/Token ด้วย GET
  2. ใช้ HTTPS ทุกกรณี (เข้ารหัสทั้ง GET และ POST)
  3. ใช้ CSRF Token สำหรับ POST Form
  4. ตั้งค่า autocomplete="off" สำหรับฟิลด์ละเอียดอ่อน