هل هناك حد طول رأس HTTP العملي؟
-
11-09-2019 - |
سؤال
لدي تطبيق ويب يضيف معلومات سياقية xmlhttprequest. الكائنات باستخدام setrequestheader. API. أنا أستخدم اسم رأس مخصص (مثل X-Foo) و json. قيمة منظمة. إنه ليس جزءا من عنوان URL QueryString أو Post Body لأنه معلومات ميتا حول الطلب.
هل هناك حد حجم عملي لقيمة الرأس؟ إذا تم اقتطاع JSOS الخاص بي، يصبح غير مرغوب فيه. أنا الأكثر قلقا مع حدود في أباتشي 2، Tomcat 6 و IIS 7. فعلت بحث جوجل الحد الأقصى طول رأس HTTP, ، ولكن العديد من النتائج تبدو مؤرخة. هناك بعض التعليقات ذات الصلة في ما حجم سلسلة وكيل المستخدم الحصول على؟ ولكن ليس محددا كما أود.
يحرر:أنا فقط ركض عبر هذا السؤال المماثل - الحد الأقصى على قيم رأس HTTP؟
المحلول
نعم، لكن الحدود قابلة للتكوين وتعتمد على النظام الأساسي. علي سبيل المثال، هر لديه حد افتراضي 8K. أعتقد أن IIS 6، لست متأكدا من IIS 7، لديه حد 16 كيلو. ركضت هذا عند استخدام مصادقة Windows المدمجة لعدة مواقع الويب. اتضح أن الرمز الأماني الخاص بي كان كبيرا جدا عند ترميزه في الرأس. لحسن الحظ، هذه قابلة للتكوين. يمكن العثور على إعدادات التسجيل ل IIS في http://support.microsoft.com/kb/820129.. وبعد أعتقد أن الإعدادات الرئيسية لتغييرها هي MaxfieldLength (لكل حجم رأس) و MaxRequestBytes (الحجم الكلي للطلب).
نصائح أخرى
على الرغم من أن كل برنامج خادم الويب لديه بعض القيود، إلا أن هناك فرقا ما إذا كان هناك حد ل خط طلب HTTP. بالإضافة إلى حقول رأس أو لكل حقل رأس.
إليك ملخص:
حتى تختتم: أن تكون مقبولة من قبل جميع خوادم الويب أعلاه، يجب ألا تتجاوز خط طلب الطلب بالإضافة إلى حقول رأس 8190 بايت. وبعد هذا هو أيضا الحد الأقصى لكل حقول رأس (بفعالية أقل).
لأباتشي، وجدت هذا حدود الخادم لأمن Apache مقال يسرد هذه التوجيهات:
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
ل nginx، large_client_header_buffers. التوجيهات من httpccoremodule يتحكم في هذا:
يجب ألا يكون طول خط الطلب أطول أيضا أكثر من حجم المخزن المؤقت واحد، وإلا فإن العميل يحصل على الخطأ "طلب سيئ" (400).
افتراضيا، فإن حجم المخزن المؤقت واحد يساوي حجم الصفحة، اعتمادا على منصة هذا إما 4K أو 8K
على الرغم من أنه يمكنك تكوين الخادم، فمن غير المرجح أن تقوم حقا بتكوين الطريق بأكمله من خلال جدران الحماية والموازن والوكلاء. الحفاظ على حجم رأس صغير يحتفظ بالمشاكل بعيدا.
يحتوي The Flash Media Server 4.5 على حد الطول الافتراضي القصير للغاية الذي يمكن أن يسبب الخادم لا يستجيب ببساطة، خاصة في الظروف التي يوجد فيها حمولة ملف تعريف الارتباط المعتدل.
في Flash Media Server Adaptor.xml ملف،
MaxHeaderLineLength
يحدد العنصر حجم رأس HTTP يمكن أن يتعامل الخادم معالجته. القيمة الافتراضية لMaxHeaderLineLength
هو 1024 بايت. تقوم بعض المتصفحات بإرسال رأس أكبر من 1024 بايت. في هذا السيناريو، يرسل Apache رد فارغ. لإصلاح هذه المشكلة، تكوينMaxHeaderLineLength
إلى 8192.ملاحظة: افتراضيا، فإن الحد الأقصى لحجم رأس Apache HTTP هو 8 كيلو بايت (8190 بايت بالإضافة إلى عودة النقل).
وضع هذا هنا في حالة تعطل حجم حجم الرأس على خادم الوسائط فلاش شخص آخر.