ความยาวสูงสุดของคำขอ HTTP GET


487

ความยาวสูงสุดของคำขอHTTP GETคือเท่าใด

มีข้อผิดพลาดในการตอบกลับที่กำหนดว่าเซิร์ฟเวอร์สามารถ / ควรกลับมาหากได้รับคำขอ GET ที่เกินความยาวนี้หรือไม่?

สิ่งนี้อยู่ในบริบทของ API บริการเว็บ แต่ก็น่าสนใจที่จะเห็นขีด จำกัด ของเบราว์เซอร์เช่นกัน


10
เป็นไปได้ซ้ำกันของความยาวสูงสุดของ URL คืออะไร?
KillianDS

7
@KillianDS ไม่มีความเกี่ยวข้องใด ๆ กับ URL ที่มีความยาวสูงสุด คำถามเกี่ยวกับความยาวสูงสุดของคำขอที่ส่งไปยัง URL
มาร์ควิสแห่ง Lorne

2
@EJP เนื้อหา 'data' ของ GET ไม่ใช่ URI
KillianDS

@JimAho ความคิดเห็นของคุณซ้ำกับความคิดเห็นแรกเช่นกัน .....
Jun711

คำตอบ:


463

ขีด จำกัด ขึ้นอยู่กับทั้งเซิร์ฟเวอร์และไคลเอนต์ที่ใช้ (และถ้ามีให้ใช้พร็อกซีเซิร์ฟเวอร์หรือไคลเอ็นต์กำลังใช้งาน)

เว็บเซิร์ฟเวอร์ส่วนใหญ่มีขีด จำกัด 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


6
คุณตอบคำถามในแง่ของข้อ จำกัด ของเบราว์เซอร์ คุณรู้หรือไม่ว่ามีความแตกต่างระหว่าง GET และ POST (ในแง่ของขนาดคำขอที่มีปัญหา) หรือไม่ถ้า HttpClient ถูกใช้เพื่อโต้ตอบกับเซิร์ฟเวอร์ REST
aioobe

3
แน่นอนว่า POST ใช้ร่างกายเพื่อส่งข้อมูล ข้อกำหนด HTTP ไม่ได้กำหนดขนาดที่ จำกัด สำหรับโพสต์
Ignacio A. Poletti

1
มันได้รับอนุญาตอย่างสมบูรณ์แบบจาก Http เพื่อใส่เนื้อหาในคำขอ GET และ DELETE ฉันทดสอบใน Java และใช้งานได้ น่าเสียดายที่ที่นี่อีกครั้งพร็อกซี่บางคนสามารถตัดร่างกายเต็ม
Nicolas Zozol

12
วิธีการรับและโพสต์มีความหมายที่เฉพาะเจาะจงดังนั้นการใช้ POST เพื่อดำเนินการ GET เหมือนกับการใช้ค้อนทุบไข่
nohros

18
@nohros นั่นเป็นความจริงในอุดมคติ แต่ GET ก็มีข้อ จำกัด ที่ POST / PUT ทำไม่ได้ ตัวอย่างเช่นสมมติว่าคุณต้องการค้นหาคิวรีที่ยาวมากซึ่งเกี่ยวข้องกับรหัสไอดี หากคุณเลือกใช้รหัสหลายร้อยรหัสนั่นอาจเป็นการละเมิดข้อ จำกัด ของขนาด URL ที่อนุญาตในขณะที่การวางแบบสอบถามนั้นใน POST สามารถหลีกเลี่ยงได้แม้ว่าจะไม่เหมาะสมตามหลักการ โดยส่วนตัวแล้วฉันหวังว่า HTTP อนุญาตให้ GET ร้องขอให้มีเนื้อหาเหมือน PUT และ POST
devios1

143

คุณกำลังถามคำถามสองข้อแยกกันที่นี่:

ความยาวสูงสุดของคำขอ HTTP GET คือเท่าใด

ดังที่ได้กล่าวไปแล้ว HTTP เองไม่ได้กำหนดขีด จำกัด ฮาร์ดโค้ดตามความยาวของคำขอ แต่เบราว์เซอร์มีขีด จำกัด อยู่ในช่วง 2 KB - 8 KB (255 bytes ถ้าเรานับเบราว์เซอร์ที่เก่ามาก )

มีข้อผิดพลาดการตอบกลับที่กำหนดว่าเซิร์ฟเวอร์สามารถ / ควรกลับมาหากได้รับคำขอ GET เกินความยาวนี้หรือไม่?

นั่นคือสิ่งที่ไม่มีใครตอบ

HTTP 1.1 กำหนดรหัสสถานะ414 Request-URI Too Longสำหรับกรณีที่ถึงขีด จำกัด ที่กำหนดโดยเซิร์ฟเวอร์ ท่านสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับRFC 2616

สำหรับกรณีของข้อ จำกัด ที่กำหนดโดยไคลเอนต์ไม่มีความรู้สึกใด ๆ กับเซิร์ฟเวอร์ที่ส่งคืนบางสิ่งเนื่องจากเซิร์ฟเวอร์ไม่ได้รับการร้องขอเลย


23

ข้อ จำกัด ของเบราว์เซอร์คือ:

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

ต้องการมากขึ้น? ดูคำถามนี้ในกองมากเกิน


5

คำถามที่คล้ายกันอยู่ที่นี่: มีการจำกัดความยาวของคำขอ GET หรือไม่

ฉันใช้งานเกินขีด จำกัด แล้วและในบัญชีโฮสติ้งที่แชร์ของฉัน แต่เบราว์เซอร์ส่งคืนหน้าเปล่าก่อนที่จะถึงเซิร์ฟเวอร์ที่ฉันคิด


3

ในทางเทคนิคแล้วฉันเคยเห็น HTTP GET จะมีปัญหาหากความยาว URL ยาวเกิน 2,000 ตัวอักษร ในกรณีนั้นควรใช้ HTTP POST หรือแบ่ง URL


2

ดังที่ได้กล่าวไปแล้ว HTTP เองไม่ได้กำหนดขีด จำกัด ฮาร์ดโค้ดตามความยาวของคำขอ แต่เบราว์เซอร์มีข้อ จำกัด ตั้งแต่ 2048 ตัวอักษรที่ได้รับอนุญาตในวิธีการ GET


-6

รับคำขอโดยใช้เบราว์เซอร์ Chrome

ใช่. ไม่มีข้อ จำกัด สำหรับคำขอ GET

ฉันสามารถส่ง ~ 4000 อักขระเป็นส่วนหนึ่งของสตริงข้อความค้นหาโดยใช้ทั้งเบราว์เซอร์ Chrome และคำสั่ง curl

ฉันใช้เซิร์ฟเวอร์ Tomcat 8.x ซึ่งได้ส่งคืนการตอบสนอง 200 OK ที่คาดไว้

นี่คือภาพหน้าจอของคำขอ Google Chrome HTTP (ซ่อนจุดปลายทางที่ฉันลองเนื่องจากเหตุผลด้านความปลอดภัย):

การตอบสนอง

รับโดยใช้เบราว์เซอร์ Chrome

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.