Http हेडर मानों पर अधिकतम?


326

क्या HTTP हेडर के लिए स्वीकृत अधिकतम स्वीकार्य आकार है? यदि ऐसा है, तो ये क्या है? यदि नहीं, तो क्या यह ऐसा कुछ है जो सर्वर विशिष्ट है या किसी भी आकार के हेडर की अनुमति देने के लिए स्वीकृत मानक है?

जवाबों:


316

नहीं, HTTP किसी भी सीमा को परिभाषित नहीं करता है। हालाँकि अधिकांश वेब सर्वर हेडर के आकार को सीमित करते हैं जो वे स्वीकार करते हैं। उदाहरण के लिए Apache की डिफ़ॉल्ट सीमा 8KB है, IIS में यह 16K है413 Entity Too Largeयदि हेडर का आकार उस सीमा से अधिक है, तो सर्वर त्रुटि लौटाएगा ।

संबंधित प्रश्न: उपयोगकर्ता एजेंट स्ट्रिंग कितना बड़ा हो सकता है?


10
यह उत्तर बताता है कि सर्वर द्वारा अधिकतम स्वीकृत हेडर का आकार। लेकिन वेब सर्वर (जैसे अपाचे) अधिकतम हेडर आकार क्या भेजने में सक्षम है?
पचेरियर

@Pacerier: यह अपाचे के लिए 8175 बाइट्स जैसा दिखता है, लेकिन मैं अभी भी खोज रहा हूं। यदि आप जो कुछ भी बैकएंड से ऐसी सीमा में हैं, तो उपयोगी त्रुटि संदेश प्राप्त करने की अपेक्षा न करें।
hakre

2
@ खाक: IIRC, पूरी पंक्ति के लिए 8K, पूरे हेडर लाइन्स (हेडर्स के नाम, व्हाइट-स्पेस और हेडर के पेलोड) की गिनती।
वार्टेक

क्या हेडर के कस्टम अधिकतम आकार को परिभाषित करने का एक तरीका है?
सुदीप बोलाखे

शायद SPNego और Kerberos प्रोटोकॉल आवश्यकताओं के कारण IIS 16k के लिए खुला है, और वे अक्सर "विंडोज प्रामाणिक" के लिए उपयोग किए जाते हैं।
रोनेन केरदुदो

220

जैसा कि vartec ऊपर कहता है, HTTP कल्पना एक सीमा को परिभाषित नहीं करती है, हालांकि कई सर्वर डिफ़ॉल्ट रूप से करते हैं। इसका मतलब है, व्यावहारिक रूप से, निचली सीमा 8K है । अधिकांश सर्वरों के लिए, यह सीमा अनुरोध पंक्ति और सभी शीर्ष लेख फ़ील्ड के योग पर लागू होती है (इसलिए अपने कुकीज़ को छोटा रखें)।

यह ध्यान देने योग्य है कि nginx डिफ़ॉल्ट रूप से सिस्टम पेज आकार का उपयोग करता है, जो कि अधिकांश सिस्टम पर 4K है। आप इस छोटे कार्यक्रम के साथ देख सकते हैं:

pagesize.c:

#include <unistd.h>
#include <stdio.h>

int main() {
    int pageSize = getpagesize();
    printf("Page size on your system = %i bytes\n", pageSize);
    return 0;
}

साथ संकलित करें gcc -o pagesize pagesize.cतो चलाने ./pagesizeलिनोड से मेरा ubuntu सर्वर कर्तव्यनिष्ठता से मुझे सूचित करता है कि उत्तर 4k है।


6
Apache2 के लिए, URL लंबाई को नियंत्रित किया जाता है LimitRequestLineऔर LimitRequestFieldSizeप्रत्येक HTTP हेडर लाइन पर व्यक्तिगत रूप से लागू होता है ... "योग ..." का नहीं
यवेस मार्टिन

1
कुकीज़ में 4093 बाइट्स की कुल आकार सीमा होती है। stackoverflow.com/questions/640938/…
जेफ़ लोवी

25
पृष्ठ का आकार पाने के लिए कोड लिखने की आवश्यकता नहीं है। एक टर्मिनल से: getconf PAGESIZE
Ponytech

6
इस उत्तर के लिखे जाने के बाद से यह संभवतः बदल गया है, लेकिन लिंक किए गए nginx पृष्ठ उत्तर से मेल नहीं खाते हैं। नेगनेक्स पृष्ठ इंगित करता है कि डिफ़ॉल्ट बफर आकार 8k है, और यह अनुरोध डिफ़ॉल्ट रूप से 4 बफ़र्स का उपयोग कर सकता है (बफर आकार स्वयं अनुरोध लाइन और प्रत्येक व्यक्तिगत हेडर के आकार को सीमित करता है)। तो इससे पता चलता है कि nginx 16-32k के बीच कहीं के लिए अनुमति देता है (मैं मान रहा हूं कि एक पंक्ति को दो बफ़र्स में विभाजित नहीं किया जा सकता है, इसलिए बफ़र्स को सभी तरह से भरा नहीं जा सकता है)।
लिली बॉलर

Apache 2.4 पर मान जोड़ना जो समान है: httpd.apache.org/docs/2.4/mod/core.html#limitrequestfieldsize : Apache 2.0, 2.2,2.4: 8K
Med Ali Difallah

5

HTTP प्रत्येक शीर्ष लेख फ़ील्ड की लंबाई या हेडर अनुभाग की लंबाई पर पूरी तरह से एक पूर्वनिर्धारित सीमा नहीं रखता है, जैसा कि धारा 2.5 में वर्णित है। अलग-अलग हेडर फ़ील्ड की लंबाई पर विभिन्न तदर्थ सीमाएँ व्यवहार में पाई जाती हैं, जो अक्सर विशिष्ट क्षेत्र शब्दार्थ के आधार पर होती हैं।

HTTP हैडर का मान सर्वर कार्यान्वयन द्वारा प्रतिबंधित है। Http विनिर्देश हेडर आकार को प्रतिबंधित नहीं करता है।

एक सर्वर जो एक अनुरोध हेडर फ़ील्ड, या फ़ील्ड्स का सेट प्राप्त करता है, इससे बड़ा होना आवश्यक है कि एक उपयुक्त 4xx (क्लाइंट एरर) स्टेटस कोड के साथ MUST जवाब देना चाहिए। ऐसे हेडर फ़ील्ड्स को अनदेखा करने से तस्करी के हमलों (धारा 9.5) का अनुरोध करने के लिए सर्वर की भेद्यता बढ़ जाएगी।

ऐसा होने पर अधिकांश सर्वर वापस आ जाएंगे 413 Entity Too Largeया 4xx त्रुटि हो जाएगी।

एक क्लाइंट MAY त्याग या ट्रंकट प्राप्त किए गए हेडर फ़ील्ड्स जो क्लाइंट से प्रोसेस करने के लिए बड़े होते हैं यदि क्षेत्र शब्दार्थ ऐसे हैं कि गिराए गए मान को सुरक्षित रूप से अनदेखा किया जा सकता है बिना संदेश फ़्रेमिंग या प्रतिक्रिया शब्दार्थ को बदले।

अनकैप्ड HTTP हेडर साइज सर्वर को हमलों के संपर्क में रखता है और जैविक ट्रैफिक की सेवा करने की क्षमता को कम कर सकता है।

स्रोत


2

यहां सबसे लोकप्रिय वेब सर्वर की सीमा है

  • अपाचे - 8K
  • नेग्नेक्स - 4K-8K
  • IIS - 8K-16K
  • तोमकैट - 8K - 48K

1

मैंने यह भी पाया कि कुछ मामलों में कई हेडर के मामले में 502/400 का कारण आकार की परवाह किए बिना हेडर की बड़ी संख्या के कारण हो सकता है। डॉक्स से

ट्यून.http.maxhdr एक अनुरोध में हेडर की अधिकतम संख्या निर्धारित करता है। जब एक अनुरोध इस मूल्य (पहली पंक्ति सहित) से अधिक हेडर के साथ आता है, तो इसे "400 खराब अनुरोध" स्थिति कोड के साथ खारिज कर दिया जाता है। इसी तरह, "502 बैड गेटवे" के साथ बहुत बड़ी प्रतिक्रियाएं अवरुद्ध हैं। डिफ़ॉल्ट मान 101 है, जो सभी उपयोगों के लिए पर्याप्त है, यह देखते हुए कि व्यापक रूप से तैनात Apache सर्वर एक ही सीमा का उपयोग करता है। यह इस सीमा को आगे बढ़ाने के लिए उपयोगी हो सकता है ताकि अस्थायी रूप से एक छोटी गाड़ी के आवेदन को उस समय तक काम करने दिया जा सके जब तक यह ठीक नहीं हो जाता। ध्यान रखें कि प्रत्येक नया हेडर प्रत्येक सत्र के लिए 32 बिट मेमोरी की खपत करता है, इसलिए इस सीमा को बहुत अधिक न बढ़ाएं।

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr

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