ความยาว URL สูงสุดใน Tomcat คืออะไร?


43

และมันสามารถกำหนดค่าได้หรือไม่? ฉันสามารถตั้งค่า Tomcat เพื่อให้ URL มีขนาด 200K ของ params การสืบค้นผ่านไปยัง servlet ที่มีอยู่ได้สำเร็จหรือไม่

ใช่ฉันรู้ว่าควรใช้ POST เมื่อคุณมีข้อมูลจำนวนมาก นั่นเป็นตัวเลือกที่น่าพอใจน้อยลงในกรณีนี้โดยเฉพาะ แอปพลิเคชันที่มีอยู่ (เครื่องมือค้นหา) คาดว่าคำขอ GET เพื่อทำการค้นหา

คำตอบ:


60

คุณสามารถแก้ไขรายการตัวเชื่อมต่อ HTTP / 1.1 ของ tomcat / conf / server.xml และเพิ่ม maxHttpHeaderSize = "65536" เพื่อเพิ่มจากค่าเริ่มต้นสูงสุด 8K เป็น 64K ฉันคิดว่าคุณสามารถเพิ่มจำนวนนี้ได้มากเท่าที่จำเป็น แต่ในขณะนี้ 64K นั้นเพียงพอสำหรับความต้องการของฉันดังนั้นฉันจึงไม่ได้ลองเลย

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

3
มีประโยชน์มากแก้ปัญหาของฉันด้วย Solr ดูเหมือนว่าเรากำลังขีดข่วนขีด จำกัด เริ่มต้น 8192 ในการกำหนดค่าserver.xmlโดยไม่สังเกตเห็นและก็ชนมัน เจ็บปวด gotcha: ไม่มีอะไรเลยที่ถูกบันทึกไว้เกี่ยวกับสิ่งนั้นการเชื่อมต่อถูกลดลงไปอย่างเงียบ ๆ (ฉันไม่จำสถานะ HTTP อีกต่อไป) ฉันสะดุดเอกสารที่tomcat.apache.org/tomcat-5.5-doc/config/http.htmlก่อนหน้านี้ แต่ฉันไม่ได้เชื่อมโยงmaxHttpHeaderSizeด้วยชื่อหรือคำอธิบายที่เกี่ยวข้องกับพารามิเตอร์การร้องขอคำขอ GET ด้วยเช่นกัน
ทำเครื่องหมาย

นอกจากนี้เราเพิ่งไปถึงขีด จำกัด เดียวกันใน Solr ไม่มีอะไรนอกจากหน้าขาวที่ว่างเปล่า ... :( maxHttpHeaderSize ทำเคล็ดลับได้
85116

ฉันคิดว่า maxHttpHeaderSize = "100000" เป็นไปไม่ได้มันควรจะคูณด้วย 1024 ฉันได้เปลี่ยน maxHttpHeaderSize = "1048576" ซึ่งเป็น 1024 * 1024 และยังไม่ทำงาน

3
คำตอบที่ได้รับการยอมรับ "maxHttpHeaderSize =" 65536 " ไม่ทำงานมันทำงานมาก่อนเพราะข้อผิดพลาดใน Tomcat URL / URI ไม่มีส่วนเกี่ยวข้องกับ HTTP Headers
Fuad Efendi

1
@FuadEfendi ขนาดสูงสุดตอนนี้คืออะไร?
mjaggard

5

ความยาวของการร้องขอ HTTP GET ไม่ได้บังคับใช้โดย RFC2616เช่นไมโครซอฟท์รายงานสำหรับIE ยาวสูงสุดหน้าให้ความช่วยเหลือ

ดังนั้นความยาวได้สูงสุดเป็นลูกค้า (เบราว์เซอร์) ปัญหาที่เกี่ยวข้อง หากคนของคุณใช้แอปของคุณคุณสามารถบังคับให้ใช้เบราว์เซอร์ที่ระบุคุณสามารถค้นหาว่าเบราว์เซอร์นี้รองรับความยาวเท่าใด

ในทุกกรณีฉันขอแนะนำให้ดูหน้าWikypediaเกี่ยวกับปัญหาที่เกี่ยวข้องกับเบราว์เซอร์ในสตริงการสืบค้น (ส่วนหนึ่งของคำขอที่นำพารามิเตอร์สำหรับแอปฝั่งเซิร์ฟเวอร์

แน่นอนว่า Tomcat อาจเพิ่มขีด จำกัด เช่นกันทางฝั่งเซิร์ฟเวอร์ RFC พูดว่า:

เซิร์ฟเวอร์จะต้องสามารถจัดการ URI ของทรัพยากรใด ๆ ที่พวกเขาให้บริการและควรจะสามารถจัดการ URIs ของความยาวไม่ จำกัด หากพวกเขาให้รูปแบบตาม GET ที่สามารถสร้าง URIs ดังกล่าว เซิร์ฟเวอร์ควรส่งคืนสถานะ 414 (Request-URI ยาวเกินไป) หาก URI ยาวเกินกว่าที่เซิร์ฟเวอร์สามารถจัดการได้ (ดูหัวข้อ 10.4.15)

เพื่อให้คุณสามารถทดสอบได้ง่ายว่า Tomcat มีขีด จำกัด และค้นหาว่าข้อ จำกัด นี้เพียงแค่ใช้คำขอที่แตกต่างกันโดยเริ่มจากคำขอที่ยาวมากซึ่งให้ข้อผิดพลาดและลงครึ่งหนึ่ง จากนั้นใช้วิธีการแบ่งครึ่งเพื่อค้นหาค่าที่ต้องการอย่างรวดเร็ว


อัลเบิร์ตฉันทราบว่า Tomcat มีขีด จำกัด นอกกรอบ (เช่น 8K); ฉันสงสัยว่ามีข้อ จำกัด ที่แม้แต่การกำหนดค่าก็ไม่สามารถเอาชนะได้
Michael Gundlach

2

สำหรับตัวเชื่อมต่อ AJP คุณต้องปรับเปลี่ยนpacketSizeแอตทริบิวต์:

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />

1
หากคุณใช้ mod_proxy คุณต้องตั้งค่าProxyIOBufferSize 65536 httpd config ของคุณด้วย
ฆ่าตัวตาย

1

คุณสามารถเปลี่ยนการกำหนดค่าที่เซิร์ฟเวอร์ Tomcat (.. \ Tomcat 6.0 \ conf \ server.xml)

<Connector port = "8983" maxHttpHeaderSize = "100000" โปรโตคอล = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />


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