HTTP GET अनुरोध की अधिकतम लंबाई


487

HTTP GET अनुरोध की अधिकतम लंबाई क्या है ?

क्या कोई प्रतिक्रिया त्रुटि परिभाषित है कि सर्वर जीईटी अनुरोध को प्राप्त कर सकता है / वापस लौटना चाहिए जो इस लंबाई से अधिक है?

यह एक वेब सेवा एपीआई के संदर्भ में है, हालांकि यह ब्राउज़र की सीमाओं को भी देखना दिलचस्प है।



7
@ किलीडीडीएस URL की अधिकतम लंबाई के साथ ऐसा करने के लिए बिल्कुल कुछ भी नहीं है। प्रश्न एक URL पर भेजे गए अनुरोध की अधिकतम लंबाई के बारे में है ।
लोर्ने

2
@ GET की 'डेटा' सामग्री एक URI से अधिक नहीं है।
किलियनड्स

@JimAho आपकी टिप्पणी पहली टिप्पणी की एक प्रति है .....
Jun711

जवाबों:


463

सीमा सर्वर और उपयोग किए गए क्लाइंट (और यदि लागू हो, तो प्रॉक्सी सर्वर या क्लाइंट का उपयोग कर रहा है) दोनों पर निर्भर है।

अधिकांश वेब सर्वर में 8192 बाइट्स (8 KB) की सीमा होती है, जो आमतौर पर सर्वर कॉन्फ़िगरेशन में कहीं न कहीं विन्यास योग्य होता है। क्लाइंट साइड मामले के रूप में, HTTP 1.1 विनिर्देश भी इस बारे में चेतावनी देता है। यहाँ अध्याय 3.2.1 का एक उद्धरण है :

नोट: सर्वर को 255 बाइट्स के ऊपर URI लंबाई के आधार पर सतर्क रहना चाहिए, क्योंकि कुछ पुराने क्लाइंट या प्रॉक्सी कार्यान्वयन इन लंबाई का ठीक से समर्थन नहीं कर सकते हैं।

Internet Explorer और Safari की सीमा लगभग 2 KB, ओपेरा में 4 KB और फ़ायरफ़ॉक्स में लगभग 8 KB है। हम इस प्रकार मान सकते हैं कि 8 केबी अधिकतम संभव लंबाई है और यह कि केबी सर्वर साइड पर भरोसा करने के लिए अधिक किफायती लंबाई है और यह कि 255 बाइट्स यह मानने के लिए सबसे सुरक्षित लंबाई है कि पूरा यूआरएल अंदर आएगा।

यदि ब्राउज़र या सर्वर में सीमा पार हो गई है, तो अधिकांश बिना किसी चेतावनी के सीमा के बाहर वर्णों को काट देगा। हालाँकि कुछ सर्वर HTTP 414 त्रुटि भेज सकते हैं । यदि आपको बड़े डेटा भेजने की आवश्यकता है, तो GET के बजाय POST का बेहतर उपयोग करें। इसकी सीमा बहुत अधिक है, लेकिन क्लाइंट की तुलना में उपयोग किए जाने वाले सर्वर पर अधिक निर्भर है। आमतौर पर औसत वेब सर्वर द्वारा लगभग 2 जीबी तक की अनुमति दी जाती है। यह भी सर्वर सेटिंग्स में कहीं कॉन्फ़िगर करने योग्य है। औसत सर्वर एक सर्वर-विशिष्ट त्रुटि / अपवाद प्रदर्शित करेगा जब POST सीमा पार हो जाती है, आमतौर पर HTTP 500 त्रुटि के रूप में।


6
आप ब्राउज़र सीमाओं के संदर्भ में प्रश्न का उत्तर देते हैं। क्या आप जानते हैं कि अगर GET और POST (समस्याग्रस्त अनुरोध के आकार के संदर्भ में) के बीच कोई अंतर है, तो, कहते हैं, HttpClient का उपयोग REST सर्वर के साथ बातचीत करने के लिए किया जाता है?
aioobe

3
निश्चित रूप से, POST डेटा भेजने के लिए शरीर का उपयोग करते हैं। HTTP विनिर्देशन पोस्ट के लिए एक विशिष्ट आकार सीमा नहीं लगाता है।
इग्नासियो ए। पोलेट्टी

1
Http द्वारा GET और DELETE अनुरोधों में एक निकाय लगाने की पूरी तरह से अनुमति है। मैंने इसे जावा में परीक्षण किया है, और यह काम करता है। दुर्भाग्य से यहां फिर से कुछ प्रॉक्सिस पूरे शरीर को काट सकते थे।
निकोलस ज़ोज़ोल

12
गेट और पोस्ट विधि का एक बहुत विशिष्ट अर्थ है, इसलिए एक GET करने के लिए POST का उपयोग करना अंडे को तोड़ने के लिए एक हथौड़ा का उपयोग करने के समान है।
nohros

18
@ नोहरोस यह आदर्श रूप से सच है, लेकिन GET की सीमाएँ भी हैं जो POST / PUT नहीं हैं। उदाहरण के लिए, मान लीजिए कि आप आईडी के एक समूह को शामिल करते हुए बहुत लंबी क्वेरी करना चाहते हैं; यदि आप सैकड़ों आईडी का चयन कर रहे हैं, तो यह स्वीकार्य URL आकार की सीमा को भंग कर सकता है, जबकि उस क्वेरी को POST में डालने से बचा जा सकता है, भले ही यह वैचारिक रूप से उतनी समझ में न आए। व्यक्तिगत रूप से, मैं चाहता हूं कि HTTP ने GUT अनुरोधों को PUT और POST जैसे निकायों के लिए अनुमति दी है।
devios1

143

आप यहां दो अलग-अलग प्रश्न पूछ रहे हैं:

HTTP GET अनुरोध की अधिकतम लंबाई क्या है?

जैसा कि पहले ही उल्लेख किया गया है, HTTP स्वयं अनुरोध लंबाई पर कोई हार्ड-कोडित सीमा लागू नहीं करता है; लेकिन ब्राउज़रों की सीमा 2 केबी - 8 केबी (255 बाइट्स होती है यदि हम बहुत पुराने ब्राउज़रों की गणना करते हैं)।

क्या कोई प्रतिक्रिया त्रुटि परिभाषित की गई है कि यदि यह GET अनुरोध प्राप्त करता है तो सर्वर इस लंबाई से अधिक हो सकता है?

इसका जवाब किसी के पास नहीं है।

HTTP 1.1 414 Request-URI Too Longउन मामलों के लिए स्थिति कोड को परिभाषित करता है जहां सर्वर-डिफाइन्ड लिमिट होती है। आप RFC 2616 पर अधिक जानकारी देख सकते हैं ।

क्लाइंट-डिफ़ाइंड सीमा के मामले में, सर्वर पर कुछ वापस करने का कोई अर्थ नहीं है, क्योंकि सर्वर को अनुरोध बिल्कुल नहीं मिलेगा।



5

इसी तरह का एक प्रश्न यहां है: क्या GET अनुरोध की लंबाई की सीमा है?

मैंने सीमा को मारा है और अपने साझा होस्टिंग खाते पर, लेकिन ब्राउज़र को सर्वर से मिलने से पहले एक खाली पृष्ठ वापस मिल गया है।


3

तकनीकी रूप से, मैंने देखा है कि HTTP GET में समस्याएं होंगी यदि URL की लंबाई 2000 वर्णों से आगे जाती है। उस स्थिति में, HTTP POST का उपयोग करना या URL को विभाजित करना बेहतर है।


2

जैसा कि पहले ही उल्लेख किया गया है, HTTP स्वयं अनुरोध लंबाई पर कोई हार्ड-कोडित सीमा लागू नहीं करता है; लेकिन ब्राउज़र में GET विधि में अनुमत 2048 वर्ण पर सीमा होती है।


-6

Chrome ब्राउज़र का उपयोग करके प्राप्त करें

हाँ। GET अनुरोध पर कोई सीमा नहीं है।

मैं Chrome ब्राउज़र और कर्ल कमांड दोनों का उपयोग करके क्वेरी स्ट्रिंग के भाग के रूप में ~ 4000 वर्ण भेजने में सक्षम हूं।

मैं टॉमकैट 8.x सर्वर का उपयोग कर रहा हूं, जिसने अपेक्षित 200 ओके प्रतिक्रिया वापस कर दी है।

यहाँ एक Google Chrome HTTP अनुरोध का स्क्रीनशॉट है (सुरक्षा कारणों के कारण मैंने जो प्रयास किया था उसे छिपाया गया है):

प्रतिक्रिया

Chrome ब्राउज़र का उपयोग करके प्राप्त करें

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