क्वेरी स्ट्रिंग की अधिकतम संभव लंबाई क्या है?


559

क्या यह ब्राउज़र पर निर्भर है? इसके अलावा, क्या विभिन्न वेब स्टैक में अलग-अलग सीमाएँ हैं जो अनुरोध से कितने डेटा प्राप्त कर सकते हैं?



यह केवल GET अनुरोधों के लिए है! POST अनुरोधों का अधिकतम आकार (मल्टीपार्ट / फॉर्म-डेटा के साथ या बिना) यहां अज्ञात है!
पेटेर - मोनिका

जवाबों:


996

RFC 2616 (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - HTTP / 1.1) बताता है कि क्वेरी स्ट्रिंग की लंबाई (धारा 3.2.1) की कोई सीमा नहीं है। आरएफसी 3986 (यूनिफ़ॉर्म रिसोर्स आइडेंटिफ़ायर - URI) यह भी बताता है कि कोई सीमा नहीं है, लेकिन इंगित करता है कि होस्टनाम DNS सीमाओं (अनुभाग 2.3.3) के कारण 255 वर्णों तक सीमित है।

हालांकि विनिर्देश किसी भी अधिकतम लंबाई को निर्दिष्ट नहीं करते हैं, लेकिन व्यावहारिक सीमाएं वेब ब्राउज़र और सर्वर सॉफ़्टवेयर द्वारा लगाई जाती हैं। अनुसंधान के आधार पर जो दुर्भाग्य से अब अपनी मूल साइट पर उपलब्ध नहीं है (यह एक छायादार ऋण साइट की ओर जाता है) लेकिन जो अभी भी Boutell.com के इंटरनेट आर्काइव पर पाया जा सकता है :

  • Microsoft इंटरनेट एक्सप्लोरर (ब्राउज़र)
    Microsoft बताता है कि इंटरनेट एक्सप्लोरर में URL की अधिकतम लंबाई 2,083 वर्ण है, जिसमें URL के पथ भाग में 2,048 से अधिक वर्ण नहीं हैं। इंटरनेट एक्सप्लोरर में एक स्पष्ट त्रुटि संदेश का उत्पादन करने की तुलना में लंबे समय तक URL का उपयोग करने का प्रयास।

  • Microsoft Edge (ब्राउज़र)
    यह सीमा लगभग 81578 वर्णों की प्रतीत होती है। Microsoft एज की URL लंबाई सीमा देखें

  • Chrome
    यह 64k वर्णों के बाद URL प्रदर्शित करना बंद कर देता है , लेकिन 100k से अधिक वर्णों की सेवा कर सकता है। इससे आगे कोई परीक्षण नहीं किया गया था।

  • फ़ायरफ़ॉक्स (ब्राउज़र)
    65,536 वर्णों के बाद, स्थान बार अब विंडोज फ़ायरफ़ॉक्स 1.5.x में URL प्रदर्शित नहीं करता है। हालाँकि, लंबे URL काम करेंगे। 100,000 पात्रों के बाद कोई और परीक्षण नहीं किया गया था।

  • सफारी (ब्राउज़र)
    कम से कम 80,000 अक्षर काम करेंगे। परीक्षण से परे की कोशिश नहीं की गई थी।

  • ओपेरा (ब्राउज़र)
    कम से कम 190,000 अक्षर काम करेंगे। 190,000 वर्णों के बाद परीक्षण रोक दिया गया। विंडोज़ के लिए ओपेरा 9 ने 190,000 वर्णों पर भी स्थान बार में पूरी तरह से संपादन योग्य, प्रतिलिपि और पेस्ट करने योग्य URL प्रदर्शित करना जारी रखा।

  • Apache (सर्वर)
    लगभग 4,000 वर्णों की सर्वर URL लंबाई सीमा में टकराए गए वेब ब्राउज़र में अधिकतम URL लंबाई को मापने का प्रारंभिक प्रयास, जिसके बाद Apache एक "413 इकाई बहुत बड़ी" त्रुटि पैदा करता है। Red Hat Enterprise Linux 4 में मौजूद अपाचे बिल्ड अप टू डेट का इस्तेमाल किया गया था। आधिकारिक अपाचे प्रलेखन में केवल एक अनुरोध पर एक व्यक्तिगत क्षेत्र पर 8,192-बाइट सीमा का उल्लेख है।

  • Microsoft इंटरनेट सूचना सर्वर (सर्वर)
    डिफ़ॉल्ट सीमा 16,384 वर्ण है (हाँ, Microsoft का वेब सर्वर Microsoft के वेब ब्राउज़र की तुलना में लंबे URL स्वीकार करता है)। यह विन्यास योग्य है।

  • पर्ल HTTP :: डेमॉन (सर्वर)
    8,000 बाइट तक काम करेगा। पर्ल के HTTP के साथ वेब एप्लिकेशन सर्वर का निर्माण करने वाले :: डेमन मॉड्यूल सभी HTTP अनुरोध हेडर के संयुक्त आकार पर 16,384 बाइट सीमा का सामना करेंगे। इसमें POST-method फॉर्म डेटा, फ़ाइल अपलोड आदि शामिल नहीं है, लेकिन इसमें URL शामिल है। व्यवहार में यह 413 त्रुटि के कारण हुआ जब एक URL 8,000 वर्णों से अधिक लंबा था। इस सीमा को आसानी से हटाया जा सकता है। Daemon.pm में 16x1024 की सभी घटनाओं को देखें और उन्हें बड़े मूल्य के साथ बदलें। बेशक, यह सेवा हमलों से इनकार करने के लिए आपके संपर्क को बढ़ाता है।


8
आप "Microsoft इंटरनेट एक्सप्लोरर (ब्राउज़र)" के बजाय संस्करण संख्या भी क्यों नहीं कहते हैं?
LCJ

5
ऐसा प्रतीत होता है कि क्वेरी स्ट्रिंग पर डिफ़ॉल्ट IIS सीमा 16,384 वर्णों की तुलना में काफी कम है - यहाँ 2048 के रूप में उद्धृत किया गया है: iis.net/configreference/system.webserver/security/…
JT3


मुझे लगता है कि आपने एक प्रकार बनाया है और DNS सीमाओं की चर्चा RFC3986 के "3.2.2। होस्ट" अनुभाग में की गई है, 2.2.3 पर नहीं। "यूआरआई उत्पादकों को उन नामों का उपयोग करना चाहिए जो DNS सिंटैक्स के अनुरूप होते हैं, तब भी जब DNS का उपयोग तुरंत स्पष्ट नहीं होता है, और इन नामों को लंबाई में 255 से अधिक वर्णों तक सीमित नहीं करना चाहिए।"
क्रेग हिक्स

java.lang.IllegalArgumentException: Request header is too largeटॉमकैट स्प्रिंग बूट एप्लिकेशन सर्वर पर कारण ।
परमवीर सिंह कर्णवाल

12

हालांकि आधिकारिक तौर पर RFC 2616 द्वारा निर्दिष्ट कोई सीमा नहीं है, कई सुरक्षा प्रोटोकॉल और सिफारिशें बताती हैं कि एक सर्वर पर मैक्सिममस्ट्रीम को 1024 की अधिकतम वर्ण सीमा पर सेट किया जाना चाहिए। जबकि पूरे URL, जिसमें querystring शामिल है, को अधिकतम 2048 पर सेट किया जाना चाहिए। पात्र। यह वेब सर्वर पर धीमे HTTP अनुरोध DDOS भेद्यता को रोकने के लिए है। यह आमतौर पर क्वालिस वेब एप्लिकेशन स्कैनर और अन्य सुरक्षा स्कैनर पर भेद्यता के रूप में दिखाई देता है।

कृपया Web.config के साथ Windows IIS सर्वर के लिए निम्न उदाहरण कोड देखें:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>
</system.webServer>

यह machine.config का उपयोग करके सर्वर स्तर पर भी काम करेगा।

नोट: क्वेरी स्ट्रिंग और URL की लंबाई को सीमित करने से स्लो HTTP अनुरोध DDOS हमले को पूरी तरह से रोका नहीं जा सकता है, लेकिन यह एक कदम है जिसे आप इसे रोकने के लिए ले सकते हैं।


2
और अब मेरे पास एक कारण है कि मैं बैकएंड इंजीनियरों को बता सकता हूं कि हम एक जीईटी अनुरोध के प्रश्नपत्रों में एक सौ 36 वर्ण यूयूआईडी की सूची को स्वीकार नहीं करेंगे। धन्यवाद!
Mordred

1

विभिन्न वेब स्टैक http-request के विभिन्न लंबाई का समर्थन करते हैं। मैं अनुभव से जानता हूं कि सफ़ारी के शुरुआती ढेरों ने केवल 4000 वर्णों का समर्थन किया और इस तरह USER-STATE के कारण ASP.net पृष्ठों को संभालने में कठिनाई हुई। यह POST के लिए भी है, इसलिए आपको ब्राउज़र की जांच करनी होगी और देखना होगा कि स्टैक की सीमा क्या है। मुझे लगता है कि नए ब्राउज़रों पर भी आप एक सीमा तक पहुँच सकते हैं। मुझे याद नहीं है, लेकिन उनमें से एक (IE6, मुझे लगता है) की सीमा 16-बिट सीमा, 32,768 या कुछ और थी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.