Tomcat में अधिकतम URL की लंबाई क्या है?


43

और क्या यह विन्यास योग्य है? क्या मैं टॉमकैट को सेट कर सकता हूं ताकि एक URL, कहे, 200K क्वेरी पाराम्स सफलतापूर्वक निहित सर्वलेट से गुजरता है?

हां, मुझे पता है कि आपके पास बहुत सारे डेटा होने पर POST का उपयोग करना चाहिए; इस विशेष मामले में यह एक कम सुखद विकल्प है। निहित एप्लिकेशन (एक खोज इंजन) एक खोज करने के लिए एक GET अनुरोध की अपेक्षा करता है।

जवाबों:


60

आप tomcat / conf / server.xml की HTTP / 1.1 कनेक्टर प्रविष्टि को संपादित कर सकते हैं, और अधिकतम 8K या तो, 64K के लिए डिफ़ॉल्ट अधिकतम से बढ़ाने के लिए एक maxHttpHeaderSize = "65536" जोड़ सकते हैं। मुझे लगता है कि आप इस संख्या को आवश्यक रूप से अधिक कर सकते हैं, लेकिन 64K इस समय मेरी जरूरतों के लिए पर्याप्त है, इसलिए मैंने इसकी कोशिश नहीं की है।

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

3
बहुत उपयोगी, सोलर के साथ मेरी समस्या को हल किया। लगता है कि हम डिफ़ॉल्ट में 8192 सीमा पर server.xmlबिना किसी सूचना के खरोंच कर रहे थे , और अचानक इसे मारा। दर्दनाक गैचा: इसके बारे में कहीं भी कुछ भी लॉग नहीं किया गया था, कनेक्शन चुपचाप गिरा दिए गए थे (मुझे अब एचटीटीपी स्थिति याद नहीं है)। मैं इससे पहले tomcat.apache.org/tomcat-5.5-doc/config/http.html पर प्रलेखन पर ठोकर खाई थी , हालांकि मैं maxHttpHeaderSizeइसके नाम से नहीं जुड़ा था और न ही इसका वर्णन GET अनुरोध क्वेरी से संबंधित होने के लिए भी।
मार्क करें

हम भी सोल में एक ही सीमा पर हिट करते हैं, एक खाली सफेद पृष्ठ के अलावा कुछ भी नहीं ... :( maxHttpHeaderSize ने चाल
चली

मुझे लगता है कि maxHttpHeaderSize = "100000" संभव नहीं है, यह 1024 से गुणा होना चाहिए। मैंने मैक्सहेटीहेडरसाइज = "1048576" को बदल दिया है जो 1024 * 1024 है और यह अभी भी काम नहीं कर रहा है।

3
एक स्वीकृत जवाब है, "maxHttpHeaderSize =" 65536 " काम नहीं करता है यह की वजह से पहले भी काम बग ।। बिलाव में URL / यूआरआई HTTP हेडर के साथ कोई संबंध नहीं है
फौद Efendi

1
@FuadEfendi अब अधिकतम आकार क्या है?
mjaggard

5

HTTP GET अनुरोध की लंबाई RFC2616 द्वारा लागू नहीं है , क्योंकि Microsoft अपने IE अधिकतम लंबाई समर्थन पृष्ठ के लिए रिपोर्ट करता है

तो, अधिकतम GET की लंबाई एक क्लाइंट (ब्राउज़र) संबंधित समस्या है । यदि आपका ऐप उन लोगों द्वारा उपयोग किया जाता है, जिन्हें आप दिए गए ब्राउज़र का उपयोग करने के लिए मजबूर कर सकते हैं, तो आप बस यह पता लगा सकते हैं कि इस ब्राउज़र समर्थन की लंबाई क्या है।

हर मामले में मैं विकिपीडिया पृष्ठ को क्वेरी स्ट्रिंग (ब्राउज़र साइड सर्वर के लिए पैरामीटर लाने के अनुरोध का एक हिस्सा, "निम्नलिखित" अनुरोध में मौजूद "के बारे में उन ब्राउज़र से संबंधित मुद्दों के बारे में एक सुझाव देता हूं ।"

बेशक टॉमकैट एक सीमा भी डाल देगा, सर्वर साइड पर। RFC कहता है:

सर्वर को उनके द्वारा दी जाने वाली किसी भी संसाधन के URI को संभालने में सक्षम होना चाहिए, और यदि वे ऐसे URI उत्पन्न कर सकते हैं जो GET- आधारित प्रपत्र प्रदान करते हैं, तो वे बिना किसी लम्बाई के URI को संभाल सकते हैं। एक सर्वर SHOULD 414 (रिक्वेस्ट-यूआरआई लॉन्ग) स्टेटस लौटाता है, अगर URI सर्वर से ज्यादा लंबे समय तक हैंडल कर सकता है (सेक्शन 10.4.15 देखें)।

तो आप आसानी से परीक्षण कर सकते हैं यदि टॉमकैट की एक सीमा है और यह पता करें कि यह सीमा बस विभिन्न अनुरोधों का उपयोग कर रही है जो बहुत लंबे समय से शुरू हो रही है और त्रुटि को एक आधा करके नीचे जा रही है। फिर सटीक मान ज्ञात करने के लिए तेजी से द्विभाजन विधि का उपयोग करें।


अल्बर्ट, मुझे पता था कि टॉमकैट बॉक्स से बाहर की सीमा थी (8K की तरह कुछ); मैं सोचता था कि क्या कोई सीमा थी जिसे कॉन्फ़िगरेशन भी दूर नहीं कर सकता था।
माइकल गुंडलाच

2

AJP कनेक्टर के लिए, आपको packetSizeविशेषता समायोजित करने की आवश्यकता है :

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

1
यदि आप mod_proxy का उपयोग कर रहे हैं तो आपको ProxyIOBufferSize 65536 अपने httpd विन्यास में भी सेट करने की आवश्यकता है।
आत्महत्या

1

आप टॉमकैट सर्वर (.. \ Tomcat 6.0 \ conf \ server.xml) पर कॉन्फ़िगरेशन बदल सकते हैं

<कनेक्टर पोर्ट = "8983" maxHttpHeaderSize = "100000" प्रोटोकॉल = "HTTP / 1.1" कनेक्शन टाइमआउट = "20000" पुनर्निर्देशन = "8443" />


आप अपने कोड को फ़ॉर्मेट करके और यह बता सकते हैं कि यह ओपी प्रश्न का उत्तर क्यों देता है।
james.garriss
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.