เมื่อพูดถึง HTTP (Hypertext Transfer Protocol) คุณอาจสงสัยว่าทำไมเมธอด GET โดยทั่วไปจึงไม่ใช้ request body ท้ายที่สุดแล้ว ในโลกของคำขอเว็บ เป็นเรื่องปกติที่จะส่งข้อมูลใน request body เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ อย่างไรก็ตาม เมธอด GET แม้ว่าจะเป็นหนึ่งในเมธอด HTTP พื้นฐานที่สุด แต่ก็ทำงานแตกต่างกันเล็กน้อย
ในคู่มือนี้ เราจะอธิบายว่าทำไมคำขอ HTTP GET จึงมักไม่รวม request body สำรวจวัตถุประสงค์ของเมธอด GET และหารือเกี่ยวกับวิธีการส่งคำขอ GET
Request Body ใน HTTP คืออะไร
ใน HTTP request body เป็นส่วนหนึ่งของข้อความคำขอที่ส่งข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์ มันมีความสำคัญสำหรับเมธอดต่างๆ เช่น POST, PUT และ PATCH ซึ่งใช้เพื่อสร้าง อัปเดต หรือแก้ไขทรัพยากร ตัวอย่างเช่น ในคำขอ POST เพื่อสร้างบัญชีผู้ใช้ รายละเอียดผู้ใช้จะอยู่ใน request body ในทางตรงกันข้าม เมธอดต่างๆ เช่น GET หรือ DELETE มักจะไม่ใช้ request body โดยเน้นที่ URLs และ headers สำหรับการดึงหรือลบทรัพยากร
คำขอ GET มี body ใน HTTP หรือไม่
ใช่ ในทางเทคนิคแล้ว เป็นไปได้ที่จะรวม request body ในคำขอ HTTP GET ตามข้อกำหนด HTTP/1.1 ข้อความคำขอ HTTP ใดๆ ได้รับอนุญาตให้มี message body และเซิร์ฟเวอร์ต้องแยกวิเคราะห์ข้อความโดยคำนึงถึงสิ่งนี้ อย่างไรก็ตาม สิ่งสำคัญคือต้องเข้าใจว่าความหมายของเซิร์ฟเวอร์สำหรับเมธอด GET นั้นถูกจำกัดในลักษณะที่ body หากรวมอยู่ จะไม่มีความหมายใดๆ กับคำขอ
ในแง่ง่ายๆ แม้ว่าจะไม่มีการห้ามอย่างชัดเจนในการรวม request body ในคำขอ GET แต่ก็ไม่มีประโยชน์ที่จะทำเช่นนั้น วัตถุประสงค์ของเมธอด GET คือการดึงข้อมูลที่ระบุโดย Request-URI และการเปลี่ยนแปลงคำขอโดยการเพิ่ม body อาจนำไปสู่ความยุ่งยากและไม่สอดคล้องกับธรรมเนียม HTTP มาตรฐาน
ข้อกำหนด HTTP/1.1
ข้อกำหนด HTTP/1.1 (RFC 7230) อนุญาตให้รวม request body ในคำขอ GET แม้ว่าจะไม่แนะนำโดยทั่วไปก็ตาม แม้ว่าจะทำได้ในทางเทคนิค แต่การแนบ body ไปยังคำขอ GET นั้นขัดต่อหลักการของการใช้ GET เพื่อดึงข้อมูลอย่างปลอดภัยโดยไม่แก้ไขทรัพยากรของเซิร์ฟเวอร์
ทำไมคำขอ HTTP GET จึงไม่ใช้ Body
ทำไมเมธอด GET จึงไม่ใช้ HTTP body ต่อไป เราจะแนะนำเหตุผลหลักว่าทำไมเมธอด GET จึงไม่ใช้ request body
ข้อจำกัดของข้อกำหนด HTTP
- ข้อกำหนด HTTP ระบุว่าคำขอเมธอด GET ต้องปลอดภัยในการส่งซ้ำ
- การมี body ที่ร้องขออาจทำให้เกิดผลข้างเคียงที่ไม่พึงประสงค์เมื่อส่งซ้ำ
รับประกัน Iden Potency
- เมธอด GET ต้องรับประกัน idempotency ที่ "ผลลัพธ์จะไม่เปลี่ยนแปลงแม้ว่าจะมีการทำซ้ำคำขอ GET เดียวกัน"
- Request body สามารถทำลาย idempotency ได้
การใช้งานแคช
- ผลลัพธ์ GET มักจะถูกแคชและนำกลับมาใช้ใหม่
- การแคชใช้งานไม่ได้หากมี request body
ความง่ายในการบุ๊กมาร์กและการแชร์
- เป็นที่พึงปรารถนาที่จะสามารถสร้างผลลัพธ์ซ้ำได้โดยใช้เพียง URL ของคำขอ GET
- หากมี request body จะเป็นการยากที่จะสร้างซ้ำโดยใช้เพียง URL
ความปลอดภัย
- คำขอ GET อาจถูกบันทึกในบันทึก ฯลฯ
- หากข้อมูลส่วนบุคคลรวมอยู่ใน request body จะกลายเป็นความเสี่ยงด้านความปลอดภัย
ด้วยเหตุผลข้างต้น เมธอด GET โดยทั่วไปจึงไม่ใช้ request body
ข้อยกเว้น: เมื่อใช้ HTTP Body แม้ในเมธอด GET
อย่างไรก็ตาม นี่ไม่ได้หมายความว่าคุณไม่สามารถใช้ HTTP body กับเมธอด GET ได้เสมอไป ในกรณีต่อไปนี้ request body อาจถูกส่งโดยใช้เมธอด GET ด้วย
ในขณะที่เมธอด HTTP GET ไม่เกี่ยวข้องกับการใช้ request body ตามธรรมเนียม มีข้อยกเว้น ตัวอย่างเช่น เมื่อระบุเกณฑ์การค้นหา เช่น คำหลักในการค้นหา คุณสามารถรวมไว้ใน request body และใช้เมธอด GET สำหรับการส่งได้
ในกรณีที่จำนวน query parameters มีจำกัด เช่น ใน REST API request body สามารถทำหน้าที่เป็นทางเลือกในการส่งข้อมูลได้ นอกจากนี้ การลักลอบคำขออาจเกี่ยวข้องกับการส่ง request body เท็จเพื่อขัดขวางการวิเคราะห์การรับส่งข้อมูล ในทางปฏิบัติ แม้ว่าเมธอด GET โดยทั่วไปจะยกเว้น request body แต่มีบางกรณีที่สามารถเบี่ยงเบนไปจากกฎนี้ได้ ในสถานการณ์ส่วนใหญ่ที่เกี่ยวข้องกับการส่งข้อมูลผ่าน HTTP body เมธอดต่างๆ เช่น POST และ PUT มักถูกนำมาใช้
Apidog: เข้ากันได้กับคำขอ HTTP ทั้งหมดอย่างสมบูรณ์ (GET, POST, PUT, DELETE)
แล้วฉันควรทำอย่างไรหากต้องการส่งข้อมูลใน HTTP body โดยใช้เมธอดต่างๆ เช่น GET หรือ POST เครื่องมือจัดการ API ที่ยอดเยี่ยมชื่อ Apidog รองรับเมธอด HTTP ทั้งหมดอย่างเต็มที่ ดังนั้นคุณสามารถระบุหนึ่งในเมธอด HTTP เมื่อส่ง คำขอ HTTP และเลือกว่าจะใช้ HTTP body หรือไม่ สามารถทำได้
นอกจากนี้ หากคุณพัฒนา API ด้วยตัวคุณเอง คุณไม่เพียงแต่สามารถออกแบบ API ได้เท่านั้น แต่ยังสามารถทำงานต่างๆ เช่น การสร้างข้อกำหนด API การทดสอบอัตโนมัติ การจำลองข้อมูล ฯลฯ

Apidog ยังรองรับเมธอด HTTP ต่างๆ รวมถึง GET และ POST ทั้ง Web API ใช้โปรโตคอล HTTP ดังนั้นคุณต้องเลือกเมธอด HTTP ขึ้นอยู่กับวัตถุประสงค์ของคุณ เมื่อพูดถึงเมธอด HTTP จะมีสิ่งต่อไปนี้เสมอ:
- GET (รับเนื้อหา)
- POST (เพิ่มเนื้อหาใหม่)
- PUT (เปลี่ยนเนื้อหาที่มีอยู่)
- DELETE (ลบเนื้อหา)

คุณสามารถเลือกเมธอดที่ต้องการจากรายการดรอปดาวน์เมธอด HTTP หรือหากคุณต้องการใช้ HTTP body คุณสามารถสลับไปที่แท็บ "Body" ของพารามิเตอร์ Request ได้อย่างง่ายดาย

คลิกปุ่ม "ส่ง" คุณจะได้รับการตอบสนอง GET อย่างรวดเร็ว




