क्या अनुरोधों के लिए http संपीड़न सक्षम करना संभव है?


35

मैं सर्वर प्रतिक्रियाओं के लिए http संपीड़न को सक्षम करने के बारे में बहुत सारी जानकारी देखता हूं लेकिन आने वाले अनुरोधों के बारे में क्या। क्या ब्राउज़र के लिए यह बड़ा अर्थ नहीं होगा कि वे सर्वर पर भेजने से पहले बड़े फॉर्म पोस्टों को संकुचित कर दें?

एक अन्य उदाहरण एक REST वेब सेवा है जिसका हम उपयोग करते हैं। हमें बड़ी XML फ़ाइलों (10+ MB) के साथ बार-बार PUT अनुरोध भेजना होगा और निश्चित रूप से दोनों पक्षों पर कुछ बैंडविड्थ / गति लाभ दिखाई देंगे।

तो क्या यह सर्वर पर हल की गई समस्या है या प्रत्येक वेब एप्लिकेशन को इसे व्यक्तिगत रूप से संभालना है?

जवाबों:


30

करने के लिए PUTसर्वर से डेटा संकुचित आप अनुरोध शरीर को संपीड़ित और सेट करना होगा Content-Encoding: gzipहैडर। हेडर खुद को असम्पीडित होना चाहिए। यह mod_deflate में प्रलेखित है :

Mod_deflate मॉड्यूल भी एक gzip संपीड़ित अनुरोध निकाय को विघटित करने के लिए एक फ़िल्टर प्रदान करता है। इस सुविधा को सक्रिय करने के लिए आपको SetInputFilter या AddInputFilter का उपयोग करके इनपुट फ़िल्टर श्रृंखला में DEFLATE फ़िल्टर सम्मिलित करना होगा।

...

अब अगर एक अनुरोध में एक सामग्री-एन्कोडिंग शामिल है: gzip हेडर, शरीर स्वचालित रूप से विघटित हो जाएगा। कुछ ब्राउज़रों के पास निकायों का अनुरोध करने की क्षमता है। हालाँकि, कुछ विशेष अनुप्रयोग वास्तव में समर्थन अनुरोध संपीड़न करते हैं, उदाहरण के लिए कुछ WebDAV क्लाइंट।

और यह वर्णन करने वाला एक लेख यहाँ है :

तो आप इसे कैसे करते हैं? यहाँ एक धुंधला है, फिर से mod_deflate स्रोत कोड से: केवल मुख्य अनुरोध / कोई उप-प्रक्रिया पर काम करते हैं। इसका मतलब है कि अनुरोध के पूरे शरीर को संकुचित होना चाहिए यदि हमने इसका उपयोग करना चुना है, तो केवल मल्टीपार्ट अनुरोध में फ़ाइल वाले भाग को संपीड़ित करना संभव नहीं है।

अलग-अलग, एक ब्राउज़र Accept-Encodingहेडर को यहाँ के अनुसार सेट करके सर्वर रिस्पॉन्स कंटेंट का अनुरोध कर सकता है :

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

यह संकुचित डेटा को ब्राउज़र में लौटा देगा।


5
+1 NB आप लिखते हैं you must compress the whole request, inclusive of header। हालाँकि, HTTP शीर्ष लेख संकुचित नहीं होना चाहिए । केवल एक चीज जिसे संपीड़ित किया जाना है (पूर्ण रूप से, जैसा कि लेख आप सही ढंग से उद्धृत करते हैं), http बॉडी है।
यूजीन बेरेसोव्स्की

1
यह गलत है: Accept-Encodingसर्वर को बताता है कि ग्राहक किस संपीड़न का समर्थन करता है। शीर्षलेख Content-Encodingशरीर के संपीड़न का वर्णन करता है।
maaartinus

@maaartinus पहले उद्धरण दूसरे पैराग्राफ को देखें। मैंने स्पष्टता के लिए उत्तर को पुनर्गठित किया है।
एंडी

4

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

  1. एप्लिकेशन स्वयं द्वारा अनुरोध निकाय को फिर से जोड़ने का समर्थन करता है। एक उदाहरण पुस्तकालय जो यह कर सकता है वह है phpxmlrpc एक।

  2. वेबसर्वर एप्लिकेशन को पास करने से पहले प्रतिक्रिया निकाय को फुलाता है। यह अपाचे के mod_deflate फिल्टर और एक इनपुटफिल्टर को स्थापित करने के लिए संभव है


2

मूल रूप से मेरे द्वारा ज्ञात किसी भी ब्राउज़र से नहीं, आपको एक प्लगइन खोजना होगा जो आपके लिए ऐसा करेगा। आपको मूल रूप से सामग्री-एन्कोडिंग HTTP हेडर सेट करना होगा ताकि सर्वर को यह पता चल सके कि अनुरोध किस प्रकार से आ रहा है। सर्वर को, निश्चित रूप से उस एन्कोडिंग को संभालने में सक्षम होने की आवश्यकता है।


0

यह अनुमति नहीं है। HTTP विनिर्देशन ( RFC 2616 ) के अनुसार, Content-Encodingसंभावित अनुरोध शीर्षलेख फ़ील्ड में से एक नहीं है, इसलिए अनुरोध निकाय को संपीड़ित करना संभव नहीं है क्योंकि सर्वर को यह पता होने देने का कोई कानूनी तरीका नहीं है। अनुरोध निकाय का कोई भी संपीड़न केवल एक गैर-मानक एक्सटेंशन के रूप में किया जाता है।


12
यह उत्तर गलत है RFC 2616 में विशेष रूप से उल्लेख किया गया है कि If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type).इसके अलावा Request and Response messages MAY transfer an entity if not otherwise restricted by the request methodऔर इसके Content-Encodingविकल्प के रूप में सूचीबद्ध किया जा रहा हैentity-header
पीटर टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.