13 คะแนน โดย xguru 2024-09-18 | 7 ความคิดเห็น | แชร์ทาง WhatsApp
  • เสนอ QUERY ซึ่งเป็นเมธอด HTTP ใหม่
    • เมธอดคำขอที่สามารถส่งคอนเทนต์พร้อมกับรีเควสต์ได้ และมีคุณสมบัติ safe กับ idempotent
    • ใช้วิธีนี้ได้เมื่อข้อมูลที่ส่งในรีเควสต์มีขนาดใหญ่เกินกว่าจะเข้ารหัสเป็น URI ได้
  • หากพารามิเตอร์ของคิวรีมีขนาดตั้งแต่หลาย KB ขึ้นไป หลายอิมพลีเมนเทชันจะกำหนดข้อจำกัดไว้
    • หลายครั้งไม่สามารถรู้ข้อจำกัดนี้ล่วงหน้าก่อนส่งรีเควสต์ได้ และยังไม่มีประสิทธิภาพเพราะต้องเข้ารหัส
  • ดังนั้นหลายอิมพลีเมนเทชันจึงใช้ POST แทน GET เพื่อทำคิวรี
    • แต่หากไม่มีความรู้เฉพาะเกี่ยวกับเซิร์ฟเวอร์ ก็จะไม่รู้ว่าปลอดภัยและเป็น idempotent หรือไม่ จึงยังมีข้อจำกัดพื้นฐานเช่นเดียวกับ GET
  • เมธอด QUERY มอบโซลูชันเพื่อเชื่อมช่องว่างระหว่างการใช้ GET และ POST
    • เช่นเดียวกับ POST อินพุตสำหรับงานคิวรีจะถูกส่งอยู่ในคอนเทนต์ของรีเควสต์ แทนที่จะเป็นส่วนหนึ่งของ URI ของรีเควสต์
    • แต่ต่างจาก POST เมธอดนี้ถูกกำหนดไว้อย่างชัดเจนว่า safe และ idempotent จึงรองรับความสามารถอย่างการแคชและการลองใหม่อัตโนมัติได้

Request

QUERY /contacts HTTP/1.1  
Host: example.org  
Content-Type: example/query  
Accept: text/csv  
  
select surname, givenname, email limit 10  

Response

HTTP/1.1 200 OK  
Content-Type: text/csv  
Content-Location: /contacts/responses/42  
Location: /contacts/queries/17  
  
surname, givenname, email  
Smith, John, john.smith@example.org  
Jones, Sally, sally.jones@example.com  
Dubois, Camille, camille.dubois@example.net  

7 ความคิดเห็น

 
regentag 2024-09-19

ผมไม่เข้าใจว่าทำไมถึงต้องเพิ่มสิ่งนี้เข้าไปในโปรโตคอล
มีสถานการณ์ที่พารามิเตอร์ของคิวรีมีขนาดเกินหลาย KB บ่อยขนาดนั้นเลยเหรอ?

 
savvykang 2024-09-19

https://www.baeldung.com/cs/http-get-with-body
ดูเหมือนว่าสเปก HTTP เปิดช่องให้ผู้อ่านตีความกันเองและมีการเปลี่ยนแปลงอย่างไม่สม่ำเสมอ จนถึงขั้นเหมือนกำลังจะสร้างเมธอดใหม่ขึ้นมาเลย

 
nemorize 2024-09-18

GET พร้อม request body

 
beoks 2024-09-19

ไลบรารีฝั่ง client บางตัวไม่มีวิธีส่ง request body มากับการร้องขอแบบ GET เลย ดังนั้นมันก็ดูเหมือนจะเป็นทางเลือกทดแทนได้ครับ

 
nemorize 2024-09-20

ถ้ามองจากมุมของตัวไลบรารีที่นำไปใช้งาน ผมกลับรู้สึกว่านี่เป็นข้อเสนอให้เปลี่ยนมาตรฐานที่ไม่จำเป็นยิ่งกว่าเดิมหรือเปล่าครับ?

ตามสเปกมาตรฐานแล้ว GET ไม่สามารถมี request body ได้ แต่ไลบรารีกลับส่ง request body ไปเองตามอำเภอใจ...
ถ้าอย่างนั้น แค่ทำเมธอดแบบกำหนดเองไว้ที่ชั้นไลบรารีไปเลยก็ไม่น่าจะมีปัญหาไม่ใช่หรือครับ?

แม้จะปฏิเสธความจำเป็นไปเสียทั้งหมดก็คงยาก แต่เมื่อเทียบกับ PUT, PATCH, DELETE ที่เกิดขึ้นตอนขยับจาก HTTP 1.0 ไปเป็น 1.1 แล้ว ก็รู้สึกว่ามีน้ำหนักในการโน้มน้าวน้อยกว่าครับ.

 
babadudu 2024-09-23

https://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

https://stackoverflow.com/questions/978061/http-get-with-request-body

https://elastic.co/guide/en/…

  1. ในสเปกมาตรฐาน GET Method ไม่ได้ระบุส่วนของ body ไว้ แต่ก็ไม่เคยบอกว่าห้ามใส่

  2. มีกรณีที่ server framework ไม่ประมวลผล body ใน GET Method ดังนั้น MDN จึงแนะนำว่าไม่ควรใส่ body ใน GET Method

  3. Elasticsearch รองรับ Body ใน GET Method

 
vwjdalsgkv 2024-09-20

ผมคิดว่าการที่สเปกต้องถูกเปลี่ยนเพราะการอิมพลีเมนต์ของไลบรารี น่าจะต้องพิจารณาให้รอบคอบมากกว่านี้ไหม