2009-02-27 11 views
7

मैं यह जांचना चाहता हूं कि वेब सर्वर में http संपीड़न सक्षम है या नहीं, और एक विशेष संपीड़न (यानी Gzip, Deflate, संपीड़न) सक्षम है?प्रोग्रामिक रूप से जांच कैसे करें कि वेब सर्वर में http संपीड़न सक्षम है या नहीं?

या यदि मैं "gzip, deflate" को स्वीकृति-एन्कोडिंग सेट करके वेब क्लाइंट ऑब्जेक्ट में .NET के माध्यम से डेटा का अनुरोध करता हूं, तो मुझे कैसे पता चलेगा कि पुनर्प्राप्त डेटा को संसाधित करने से पहले संपीड़ित किया गया है या नहीं?

उत्तर

9

यह जांचने के लिए कि प्रतिक्रिया निकाय का एन्कोडिंग क्या है, आपको HTTP प्रतिक्रिया शीर्षलेख की जांच करनी चाहिए: सामग्री-एन्कोडिंग।

सर्वर को केवल अनुरोध हेडर स्वीकृति-एन्कोडिंग द्वारा निर्दिष्ट एन्कोडिंग का उपयोग करने की अनुमति है। यदि सर्वर निर्दिष्ट स्वीकृति-एन्कोडिंग में से किसी एक का उपयोग करके प्रतिक्रिया नहीं दे सकता है, तो उसे 406 (स्वीकार्य नहीं) के साथ जवाब देना होगा।

उदाहरण अनुरोध:

GET/HTTP/1.1 
Host: www.brianbondy.com 
Accept-Encoding: gzip,deflate 

उदाहरण प्रतिक्रिया:

HTTP/1.1 200 OK 
Date: Thu, 04 Dec 2003 16:15:12 GMT 
Server: Apache/2.0 
Content-Encoding: gzip 
Content-Length: 1533 

Accept-Encoding के अन्य उदाहरण:

Accept-Encoding: compress, gzip 
Accept-Encoding: 
Accept-Encoding: * 
Accept-Encoding: compress;q=0.5, gzip;q=1.0 
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 

कैसे पता करने के लिए वास्तव में क्या एन्कोडिंग सर्वर पर उपलब्ध हैं:

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

इसका मतलब है कि आप सबसे अच्छा कर सकते हैं सवाल का जवाब है: अनुरोध की पहली पंक्ति में निर्दिष्ट फ़ाइल के लिए, इस फ़ाइल के लिए विशिष्ट एन्कोडिंग उपलब्ध है? आप स्पष्ट रूप से पहचान सामग्री-एन्कोडिंग को अस्वीकार कर और उस एन्कोडिंग को निर्दिष्ट करके इसका उत्तर दे सकते हैं जिसे आप जानना चाहते हैं।

Accept-Encoding: gzip, identity;q=0 

Source of examples, HTTP RFC

+0

लेकिन जब तक आप स्पष्ट रूप से इसे ना करे पहचान एन्कोडिंग (अर्थात् कोई संपीड़न) हमेशा की तरह, की अनुमति है।तो यदि सर्वर सामग्री-एन्कोडिंग देता है: पहचान, आप अभी भी नहीं जानते कि यह संपीड़न का समर्थन करता है या नहीं; यह सिर्फ इस विशेष प्रतिक्रिया को संपीड़ित नहीं करना चुना हो सकता है। – Thomas

+0

अद्यतन विवरण –

+0

क्या आपका मतलब है 'gzip, पहचान; q = 0' 'gzip के बजाय; पहचान; क्यू = 0'? – Pacerier

4

HTTP spec से:

4। "पहचान" सामग्री-कोडिंग हमेशा स्वीकार्य है, जब तक कि विशेष रूप से इनकार कर दिया गया क्योंकि स्वीकृति-एन्कोडिंग फ़ील्ड में "पहचान; q = 0" शामिल है, या क्योंकि फ़ील्ड में "*; q = 0" है और स्पष्ट रूप से शामिल नहीं है "पहचान" सामग्री-कोडिंग। यदि स्वीकार्य-एन्कोडिंग फ़ील्ड-मान खाली है, तो केवल "पहचान" एन्कोडिंग स्वीकार्य है।

तो अगर आप Accept-Encoding: identity;q=0, gzip, deflate सेट आप इसे संपीड़ित करने के लिए सर्वर के लिए मजबूर है, या एक 406 (स्वीकार्य नहीं) वापस जाएँ।

+0

जहां तक ​​मुझे पता है कि माइक्रोसॉफ्ट-आईआईएस/7.0 इसका सम्मान नहीं करता है। क्या अपाचे इसका सम्मान करता है? या अपाचे केवल 406 (जैसे माइक्रोसॉफ्ट-आईआईएस) की बजाय पहचान वापस कर देगा? – Pacerier

संबंधित मुद्दे

 संबंधित मुद्दे