ความยาวสูงสุดของคำขอHTTP GETคือเท่าใด
มีข้อผิดพลาดในการตอบกลับที่กำหนดว่าเซิร์ฟเวอร์สามารถ / ควรกลับมาหากได้รับคำขอ GET ที่เกินความยาวนี้หรือไม่?
สิ่งนี้อยู่ในบริบทของ API บริการเว็บ แต่ก็น่าสนใจที่จะเห็นขีด จำกัด ของเบราว์เซอร์เช่นกัน
ความยาวสูงสุดของคำขอHTTP GETคือเท่าใด
มีข้อผิดพลาดในการตอบกลับที่กำหนดว่าเซิร์ฟเวอร์สามารถ / ควรกลับมาหากได้รับคำขอ GET ที่เกินความยาวนี้หรือไม่?
สิ่งนี้อยู่ในบริบทของ API บริการเว็บ แต่ก็น่าสนใจที่จะเห็นขีด จำกัด ของเบราว์เซอร์เช่นกัน
คำตอบ:
ขีด จำกัด ขึ้นอยู่กับทั้งเซิร์ฟเวอร์และไคลเอนต์ที่ใช้ (และถ้ามีให้ใช้พร็อกซีเซิร์ฟเวอร์หรือไคลเอ็นต์กำลังใช้งาน)
เว็บเซิร์ฟเวอร์ส่วนใหญ่มีขีด จำกัด 8192 ไบต์ (8 KB) ซึ่งโดยปกติจะสามารถกำหนดค่าได้จากที่ใดที่หนึ่งในการกำหนดค่าเซิร์ฟเวอร์ สำหรับเรื่องที่เกี่ยวกับลูกค้าข้อมูลจำเพาะ HTTP 1.1 จะเตือนถึงสิ่งนี้ด้วย นี่เป็นส่วนของบทที่ 3.2.1 :
หมายเหตุ: เซิร์ฟเวอร์ควรระมัดระวังเกี่ยวกับความยาวของ URI มากกว่า 255 ไบต์เนื่องจากไคลเอนต์หรือพร็อกซีที่เก่ากว่าบางตัวอาจไม่รองรับความยาวเหล่านี้อย่างเหมาะสม
ขีด จำกัด ใน Internet Explorer และ Safari คือประมาณ 2 KB ใน Opera ประมาณ 4 KB และใน Firefox ประมาณ 8 KB เราอาจสันนิษฐานว่า 8 KB เป็นความยาวสูงสุดที่เป็นไปได้และ 2 KB นั้นเป็นความยาวที่ไม่แพงมากที่ต้องพึ่งพาที่ฝั่งเซิร์ฟเวอร์และ 255 ไบต์นั้นเป็นความยาวที่ปลอดภัยที่สุดที่จะคิดว่า URL ทั้งหมดจะเข้ามา
หากเกินขีด จำกัด ในเบราว์เซอร์หรือเซิร์ฟเวอร์ส่วนใหญ่จะตัดอักขระที่อยู่นอกขีด จำกัด โดยไม่มีการเตือนใด ๆ บางคนแต่เซิร์ฟเวอร์อาจส่งข้อผิดพลาด HTTP 414 หากคุณต้องการส่งข้อมูลขนาดใหญ่ควรใช้ POST แทน GET ขีด จำกัด นั้นสูงกว่ามากแต่ขึ้นอยู่กับเซิร์ฟเวอร์ที่ใช้มากกว่าไคลเอนต์ โดยทั่วไปแล้วเว็บเซิร์ฟเวอร์โดยเฉลี่ยจะมีขนาดสูงสุด 2 GB นอกจากนี้ยังสามารถกำหนดค่าได้ในที่อื่น ๆ ในการตั้งค่าเซิร์ฟเวอร์ เซิร์ฟเวอร์โดยเฉลี่ยจะแสดงข้อผิดพลาด / ข้อยกเว้นเฉพาะเซิร์ฟเวอร์เมื่อเกินขีด จำกัด POST ซึ่งมักเป็นข้อผิดพลาด HTTP 500
คุณกำลังถามคำถามสองข้อแยกกันที่นี่:
ความยาวสูงสุดของคำขอ HTTP GET คือเท่าใด
ดังที่ได้กล่าวไปแล้ว HTTP เองไม่ได้กำหนดขีด จำกัด ฮาร์ดโค้ดตามความยาวของคำขอ แต่เบราว์เซอร์มีขีด จำกัด อยู่ในช่วง 2 KB - 8 KB (255 bytes ถ้าเรานับเบราว์เซอร์ที่เก่ามาก )
มีข้อผิดพลาดการตอบกลับที่กำหนดว่าเซิร์ฟเวอร์สามารถ / ควรกลับมาหากได้รับคำขอ GET เกินความยาวนี้หรือไม่?
นั่นคือสิ่งที่ไม่มีใครตอบ
HTTP 1.1 กำหนดรหัสสถานะ414 Request-URI Too Long
สำหรับกรณีที่ถึงขีด จำกัด ที่กำหนดโดยเซิร์ฟเวอร์ ท่านสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับRFC 2616
สำหรับกรณีของข้อ จำกัด ที่กำหนดโดยไคลเอนต์ไม่มีความรู้สึกใด ๆ กับเซิร์ฟเวอร์ที่ส่งคืนบางสิ่งเนื่องจากเซิร์ฟเวอร์ไม่ได้รับการร้องขอเลย
ข้อ จำกัด ของเบราว์เซอร์คือ:
Browser Address bar document.location
or anchor tag
---------------------------------------------------
Chrome 32779 >64k
Android 8192 >64k
Firefox >64k >64k
Safari >64k >64k
Internet Explorer 11 2047 5120
Edge 16 2047 10240
คำถามที่คล้ายกันอยู่ที่นี่: มีการจำกัดความยาวของคำขอ GET หรือไม่
ฉันใช้งานเกินขีด จำกัด แล้วและในบัญชีโฮสติ้งที่แชร์ของฉัน แต่เบราว์เซอร์ส่งคืนหน้าเปล่าก่อนที่จะถึงเซิร์ฟเวอร์ที่ฉันคิด
ในทางเทคนิคแล้วฉันเคยเห็น HTTP GET จะมีปัญหาหากความยาว URL ยาวเกิน 2,000 ตัวอักษร ในกรณีนั้นควรใช้ HTTP POST หรือแบ่ง URL
ดังที่ได้กล่าวไปแล้ว HTTP เองไม่ได้กำหนดขีด จำกัด ฮาร์ดโค้ดตามความยาวของคำขอ แต่เบราว์เซอร์มีข้อ จำกัด ตั้งแต่ 2048 ตัวอักษรที่ได้รับอนุญาตในวิธีการ GET
ใช่. ไม่มีข้อ จำกัด สำหรับคำขอ GET
ฉันสามารถส่ง ~ 4000 อักขระเป็นส่วนหนึ่งของสตริงข้อความค้นหาโดยใช้ทั้งเบราว์เซอร์ Chrome และคำสั่ง curl
ฉันใช้เซิร์ฟเวอร์ Tomcat 8.x ซึ่งได้ส่งคืนการตอบสนอง 200 OK ที่คาดไว้
นี่คือภาพหน้าจอของคำขอ Google Chrome HTTP (ซ่อนจุดปลายทางที่ฉันลองเนื่องจากเหตุผลด้านความปลอดภัย):
การตอบสนอง