gzip संकुचन क्या है? HTTP gzip कैसे काम करता है
स्क्रैपलेस यूनिवर्सल स्क्रैपिंग एपीआई अनुमति प्राप्त सार्वजनिक वेब सामग्री प्राप्त करता है और जब gzip संकुचन को वास्तविक प्रतिक्रिया में देखा जाना चाहिए तो JavaScript को रेंडर कर सकता है।
TL;DR
- gzip संकुचन की एक सटीक प्रोटोकॉल भूमिका है। gzip संकुचन एक हानि रहित प्रारूप है जो DEFLATE-संकुचित डेटा को मेटाडेटा और एक अखंडता जांच के साथ gzip.wrapper के साथ जोड़ता है।
- gzip संकुचन को सही स्तर पर पढ़ा जाना चाहिए। परिवहन, प्रतिनिधित्व, ब्राउज़र नीति, और अनुप्रयोग प्राधिकरण अलग चिंताएँ बनी रहती हैं।
- मध्यवर्ती बदल सकते हैं कि एक अनुप्रयोग क्या देखता है। गेटवे, कैशेस, ब्राउज़र डिफ़ॉल्ट, और क्लाइंट पुस्तकालय स्रोत बाइट्स और पार्स किए गए डेटा के बीच प्रसंस्करण जोड़ सकते हैं।
- सत्यापन को सामग्री साक्ष्य की आवश्यकता होती है। एक स्थिति या क्षेत्र अकेले यह प्रमाणित नहीं करता कि अपेक्षित सार्वजनिक प्रतिनिधित्व पहुँचा।
- सुरक्षा क्षेत्र और सत्यापन पर निर्भर करती है। प्रोटोकॉल सिंटैक्स कभी भी एक संसाधन तक पहुंचने या कॉलर-प्रदाता मान को विश्वसनीय करने की अनुमति नहीं देता है।
gzip संकुचन क्या है?
gzip संकुचन एक हानि रहित प्रारूप है जो DEFLATE-संकुचित डेटा को मेटाडेटा और एक अखंडता जांच के साथ gzip.wrapper के साथ जोड़ता है। HTTP में, gzip एक सामग्री कोडिंग है: ग्राहक स्वीकार-कोडिंग के साथ समर्थन की भर्ती करते हैं, सर्वर सामग्री-कोडिंग: gzip के साथ एक संकुचित प्रतिनिधित्व की पहचान करते हैं, और प्राप्तकर्ता मूल मीडिया प्रकार के व्याख्या से पहले बाइट्स को डिकोड करते हैं।
उपयोगी परिभाषा में तंत्र और इसका सीमा दोनों शामिल हैं। gzip संकुचन एक विनिमय के एक विशिष्ट भाग को प्रभावित करता है, जबकि आसन्न जिम्मेदारियाँ HTTP, ब्राउज़र, चयनित परिवहन, अनुप्रयोग, या सर्वर का डेटा मॉडल के साथ बनी रहती हैं। उन स्तरों को अलग रखना त्रुटि रिपोर्ट को पुनः प्रस्तुत करने योग्य बनाता है और एक कॉन्फ़िगरेशन परिवर्तन को एक्सेस-कंट्रोल निर्णय के रूप में गलत तरीके से गलती से रोकता है।
API डेवलपर्स के लिए, पहला सवाल है कि मूल्य या व्यवहार कौन बनाता है। अगला सवाल है कि कौन इसे व्याख्यायित करता है। अंतिम सवाल है कि कौन सा अवलोकनीय परिणाम यह प्रमाणित करता है कि व्याख्या सफल रही। उन तीन उत्तरों ने एक शब्दावली शब्द को एक परीक्षण योग्य इंटरफेस अनुबंध में बदल दिया।
सरल प्रतिनिधित्व से gzip बाइट्स तक
उत्सव एक प्रतिनिधित्व से शुरू होता है जैसे HTML, JSON, CSS, या JavaScript। एक संकुचनकर्ता बार-बार बाइट अनुक्रमों को खोजता है और उन्हें DEFLATE विधि के माध्यम से संकुचित करता है, फिर gzip.wrapper फॉर्मेट जानकारी और एक चेकसम रिकॉर्ड करता है। डी-कॉंपरेशन मूल बाइट्स को ठीक से पुन: स्थापित करता है।
एक क्लाइंट स्वीकार-कोडिंग के साथ कोडिंग भेजता है जिसे वह डिकोड कर सकता है। सर्वर या मध्यवर्ती उपयुक्त और उपलब्ध होने पर gzip का चयन करते हैं, सामग्री-कोडिंग: gzip जोड़ते हैं, और कोडित प्रतिनिधित्व भेजते हैं। सामग्री-प्रकार अभी भी मूल मीडिया प्रकार का वर्णन करता है न कि संकुचन प्रारूप।
सामग्री-लंबाई, जब मौजूद हो, को कोडित संदेश की लंबाई का वर्णन करता है। पुस्तकालय और ब्राउज़र सामान्यतः सामग्री को स्वचालित रूप से डिकोड करते हैं, जिसका अर्थ है कि अनुप्रयोग कोड सामान्य पाठ प्राप्त कर सकता है भले ही नेटवर्क उपकरण एक gzip प्रतिक्रिया दिखाते हों। कच्चे बाइट डिबगिंग को उस क्लाइंट व्यवहार को ध्यान में रखना चाहिए।
संकुचन सबसे अधिक पुनरावृत्त पाठ के लिए उपयोगी है। जो प्रारूप पहले से ही घने संकुचन में होते हैं, जैसे कई चित्र, संग्रह और वीडियो प्रारूप, एक और कोडिंग चरण के बाद थोड़ा या यहां तक कि बड़ा भी हो सकते हैं।
gzip और HTTP परतें
निम्नलिखित शर्तें उन घटकों को अलग करती हैं जो अक्सर एक लेबल में समाहित होते हैं। उन्हें प्रतिभागियों के बीच इंटरफेस के रूप में पढ़ें न कि नेटवर्क ट्रेस में सजावट के रूप में।
DEFLATE
आधिकारिक हानि रहित कोडिंग जो बार-बार अनुक्रम मिलान और हफमैन कोडिंग पर आधारित है।
gzip.wrapper
संकुचित डेटा के चारों ओर का प्रारूप लिफाफा, जिसमें हेडर जानकारी और एक अखंडता जांच शामिल होती है।
स्वीकार-कोडिंग
क्लाइंट के लिए उपलब्ध डिकोडर को प्रचारित करने वाले अनुरोध प्राथमिकता क्षेत्र।
सामग्री-कोडिंग
gzip को लागू कोडिंग के रूप में नामित प्रतिक्रिया प्रतिनिधित्व क्षेत्र।
सामग्री-प्रकार
डिकोडिंग के बाद मूल प्रतिनिधित्व का मीडिया प्रकार।
भिन्नता
जब स्वीकार-कोडिंग चयन को प्रभावित करता है तो कोडित और पहचान प्रतिनिधित्वों को अलग रखने वाला कैश संकेत।
वेब डेटा संग्रह में gzip संकुचन का महत्व क्यों है
gzip संकुचन बदल सकता है कि कौन से बाइट आते हैं, उन बाइट्स की व्याख्या कैसे की जाती है, या क्या ब्राउज़र कोड परिणाम को देख सकता है। एक संग्रह कार्यप्रवाह को उपकरण बदलने से पहले उस प्रभाव को ढूंढना चाहिए। अनुरोधित यूआरएल, अंतिम यूआरएल, प्रतिक्रिया स्थिति, प्रतिनिधित्व प्रकार, प्रासंगिक प्रोटोकॉल क्षेत्रों, और एक अपेक्षित सामग्री मार्कर को रिकॉर्ड करें। वह संक्षिप्त रिकॉर्ड एक सही पृष्ठ को एक पहुंच संदेश, सहमति स्क्रीन, पुनःनिर्देशन लक्ष्य, खाली अनुप्रयोग खोल, या असंगत कोडिंग से अलग करता है।
सीधा HTTP सबसे सरल अधिग्रहण पथ है जब आवश्यक डेटा एक खुले सर्वर-निर्मित प्रतिक्रिया में होता है। एक ब्राउज़र तब प्रासंगिक हो जाता है जब अनुमोदित सामग्री JavaScript निष्पादन, ब्राउज़र-प्रबंधित राज्य, नेविगेशन, या ब्राउज़र सुरक्षा नीति पर निर्भर करती है। दोनों पथों को समान दिखने के लिए मजबूर नहीं किया जाना चाहिए: ब्राउज़र कुकीज़, संकुचन, पुनर्निर्देशन, CORS, और प्लेटफ़ॉर्म नियमों के अनुसार स्टोरेज प्रबंध करते हैं, जबकि एक सीधा क्लाइंट एक अलग सेट के डिफ़ॉल्ट को उजागर करता है।
सत्र निरंतरता तब महत्वपूर्ण होती है जब एक प्रतिक्रिया अगली अनुरोध के लिए स्थिति स्थापित करती है। एक अधिकृत अनुक्रम को एक सीमित क्लाइंट संदर्भ के भीतर रखें, आवश्यक स्थानीयकृत और नेटवर्क मूल को संरक्षित करें, और असंबंधित नौकरियों से स्थिति को मिलाने से बचें। एक प्रॉक्सी नेटवर्क मूल बदलता है; यह हेडर को पुन: उत्पन्न नहीं करता, प्रतिनिधित्वों को डिकोड नहीं करता, स्क्रिप्टों को निष्पादित नहीं करता, या प्रतिबंधित सामग्री तक पहुंच प्रदान नहीं करता।
पार्सिंग केवल प्रतिनिधित्व सत्यापन के बाद ही शुरू होती है। फ़ील्ड निकालने से पहले अंतिम मेज़बान, कैनोनिकल पहचान जहाँ उपलब्ध हो, मीडिया प्रकार, डिकोडिंग स्थिति, और आवश्यक व्यवसाय मार्कर की पुष्टि करें। यह क्रम एक पार्सर को एक त्रुटि दस्तावेज को तकनीकी रूप से सफल दिखने वाले खाली रिकॉर्ड में परिवर्तित करने से रोकता है।
मध्यस्थों को स्पष्ट ध्यान देने की आवश्यकता है। एक सामग्री वितरण नेटवर्क एक एन्कोडेड संस्करण का चयन कर सकता है, एक गेटवे OPTIONS का उत्तर दे सकता है, एक कैश एक बातचीत किए गए उत्तर का पुन: उपयोग कर सकता है, और एक अनुप्रयोग सर्वर कुकीज़ या प्राधिकरण क्षेत्रों को सेट कर सकता है। केवल अनुप्रयोग कोड की तुलना अंतिम पृष्ठ आउटपुट से करने से उस स्तर को छोड़ दिया जाता है जिसने निर्णय लिया हो सकता है।
Scrapeless Universal Scraping API तब प्रासंगिक है जब एक टीम अनुमत सार्वजनिक सामग्री की प्रबंधित पुनर्प्राप्ति की आवश्यकता होती है, जिसमें JavaScript-रेंडर किए गए पृष्ठ शामिल हैं। अधिग्रहण अनुबंध को अभी भी लक्ष्य, अनुमत क्षेत्र, अपेक्षित प्रतिनिधित्व, स्वीकृति मार्कर, और रोकने की स्थितियों को परिभाषित करना चाहिए। उत्पाद की क्षमता स्रोत शर्तों, गोपनीयता समीक्षा, या अनुप्रयोग स्तर की पुष्टि को प्रतिस्थापित नहीं करती।
सामग्री जो आमतौर पर gzip से लाभान्वित होती है
जीज़िप संकुचन एक आर्किटेक्चर में स्थान अर्जित करता है जब यह एक ठोस उत्पाद व्यवहार, संगतता की आवश्यकता, या निदान निर्णय को बदलता है। ये उपयोग केस पहले काम का वर्णन करते हैं और दूसरे प्रोटोकॉल विशेषता का।
एचटीएमएल दस्तावेज़
दोहराए गए टैग, विशेषताएँ, और पाठ पैटर्न सामान्यतः अच्छी तरह से संकुचित होते हैं।
JSON प्रतिक्रियाएँ
दोहराए गए गुण नाम और संरचनात्मक विराम चिह्न उपयोगी अतिव्यापीता उत्पन्न करते हैं।
शैली पत्रक
चुनाव और घोषणाएँ अक्सर फ़ाइल में दोहराई जाती हैं।
JavaScript
स्रोत पाठ में पुनरावृत्त पहचानकर्ता और वाक्य विन्यास होते हैं, यहां तक कि बाद में कम किया जाता है।
XML और SVG
पाठ मार्कअप और दोहराए गए तत्व नाम अच्छे संकुचन इनपुट हैं।
सीमाबद्ध डेटा
CSV और समान तालिकीय पाठ अक्सर अलग-अलग विभाजक और श्रेणीबद्ध मानों को दोहराता है।
gzip, deflate, Brotli, और संग्रह फ़ाइलें
जीज़िप संकुचन HTTP की एक परत में आता है और इसे निकटवर्ती परतों के साथ भ्रमित नहीं किया जाना चाहिए। एक साउंड कार्यान्वयन पहचानता है कि कौन सा घटक मान का चयन करता है, कौन सा घटक इसे बदल सकता है, और क्या सबूत है जो साबित करता है कि अंतिम प्रतिनिधित्व सही है।
| आयाम | जीज़िप संकुचन | संबंधित धारणा या विकल्प |
|---|---|---|
| gzip HTTP कोडिंग | बिना हानि के प्रतिनिधित्व संकुचन | पाठ प्रतिक्रियाओं के लिए व्यापक संगतता |
| deflate कोडिंग | HTTP अर्थशास्त्र में zlib-लिपटे DEFLATE | ऐतिहासिक भ्रम के साथ प्राचीन सामग्री कोडिंग |
| Brotli br कोडिंग | स्थिर शब्दकोश के साथ एक अलग बिना हानि प्रारूप | जब समर्थित हो तो वेब पाठ के लिए अक्सर चयनित |
| ज़िप संग्रह | कंटेनर जो कई फ़ाइलों को रख सकता है | डाउनलोड और पैक की गई फ़ाइल संग्रह |
| पहचान | कोई सामग्री कोडिंग लागू नहीं की गई | छोटी या पहले से ही संकुचित प्रतिनिधित्व |
एक तुलना तब ही उपयोगी होती है जब यह परतों की सीमाओं को संरक्षित करती है। एक अनुरोध में दो तंत्र एक साथ मौजूद हो सकते हैं, और एक को प्रतिस्थापित करना स्वतः दूसरे को प्रतिस्थापित नहीं करता। इनपुट, अवलोकनीय आउटपुट, विफलता स्थिति, और स्वामित्व के संदर्भ में चुने गए व्यवहार को दस्तावेज करें।
gzip तैनाती और पार्सिंग त्रुटियाँ
- पहले से संकुचित मीडिया को संकुचित करना। अतिरिक्त कार्य नगण्य बचत या बड़े परिणाम उत्पन्न कर सकता है।
- सामग्री-कोडिंग को भूलना। प्राप्तकर्ताओं को नहीं पता हो सकता है कि कच्चे बाइट्स को gzip डिकोडिंग की आवश्यकता होती है।
- बाइट्स को बदलना लेकिन एक पुरानी लंबाई बनाए रखना। सामग्री-पूर्णता को उस एन्कोडेड प्रतिनिधित्व का वर्णन करना चाहिए जो वास्तव में भेजा गया।
- प्रत्येक ग्राहक के लिए एक संस्करण को कैश करना। विभिन्न और कैश कुंजी स्वीकार-एन्कोडिंग विकल्पों को अलग करना चाहिए।
- दो बार डिकोडिंग। कई HTTP पुस्तकालय स्वचालित रूप से डिकोड करते हैं, इसलिए दूसरा एप्लीकेशन चरण पहले से सामान्य बाइट्स पर विफल हो जाता है।
- gzip को ZIP के साथ भ्रमित करना। gzip एक संकुचित डेटा स्ट्रीम का प्रतिनिधित्व करता है, जबकि ZIP एक अलग संरचना के साथ एक संग्रह कंटेनर होता है।
अधिकांश विफलताएँ उन अनुमानों को हटाने के बाद निदान करना आसान हो जाती हैं कि एक पुस्तकालय या ब्राउज़र स्वचालित रूप से क्या किया। एक न्यूनतम ट्रेस कैप्चर करें, रहस्यों को मिटाएं, और एक नियंत्रित चर को एक समय में बदलें। लक्ष्य यह है कि लौटाई गई प्रस्तुति का एक स्थिर स्पष्टीकरण हो, न कि अव्यक्त हेडर समायोजन का संग्रह।
एक gzip प्रतिक्रिया निरीक्षण
यह अनुक्रम लॉन्च से पहले डिज़ाइन समीक्षा के रूप में और व्यवहार परिवर्तनों के बाद उत्पादन निदान के रूप में काम करता है। यह प्रोटोकॉल सबूतों को एप्लीकेशन परिणाम से जोड़े रखता है।
- एक नियंत्रित Accept-Encoding मान के साथ एक अनुरोध भेजें और अंतिम प्रतिक्रिया रिकॉर्ड करें।
- कच्चे बाइट्स को पढ़ने से पहले Content-Encoding और डिकोड बाइट्स को पार्स करने से पहले Content-Type की जांच करें।
- निर्धारित करें कि क्या ग्राहक ने प्रतिक्रिया को स्वचालित रूप से डिकोड किया और उजागर किए गए क्षेत्रों को समायोजित किया।
- प्रतिनिधि सामग्री के लिए एन्कोडेड ट्रांसफर आकार की तुलना पहचान प्रतिनिधित्व से करें।
- सुनिश्चित करें कि एन्कोडेड प्रकार प्राप्तकर्ताओं के साथ संगत रहें।
- यदि माप से वास्तव में लाभ दिखता है तो पहले से संकुचित प्रकारों को छोड़ दें।
- आकार के बजाय अपेक्षित शीर्षक, स्कीमा, या सामग्री मार्कर के साथ डिकोडेड शरीर को मान्य करें।
समीक्षा समाप्त करें एक छोटे स्वीकृत नमूने और एक अस्वीकृत नमूने को समान मिटाने के नियमों के साथ सहेजकर। भविष्य में बदलाव को ज्ञात पृष्ठ पहचान, अपेक्षित क्षेत्रों, और डिकोड सामग्री के खिलाफ तुलना की जा सकती है न कि केवल मेमोरी या स्क्रीनशॉट से।
Gzip संकुचन के लिए सुरक्षा और अवलोकन
Gzip संकुशन एक अनुरोध पथ में भाग लेता है जो ब्राउज़रों, गेटवे, कैश और मूल सर्वरों को पार कर सकता है। प्रत्येक कदम केवल उन मूल्यों को स्वीकार करना चाहिए जिन्हें यह समझता है, उन क्षेत्रों को संरक्षित करें जिन्हें जीवित रहना चाहिए, और लॉग में क्रेडेंशियल या व्यक्तिगत डेटा की नकल से बचें। प्रोटोकॉल सिंटैक्स प्रमाणन नहीं है।
ऑपरेशनल रिकॉर्ड को अनुरोधित URL, अंतिम URL, स्थिति, प्रतिनिधित्व प्रकार, प्रासंगिक फ़ील्ड नाम, और एक बाउंड सामग्री मार्कर को कैद करना चाहिए। नियमित निदान के लिए पूर्ण शरीर और क्रेडेंशियल मान अक्सर आवश्यक नहीं होते हैं और अनावश्यक रिटेंशन जोखिम पैदा कर सकते हैं।
ब्राउज़र व्यवहार और प्रत्यक्ष HTTP व्यवहार विभिन्न परीक्षण सतहें हैं। CORS, कुकी भंडारण, स्वचालित डिकम्प्रेशन, और रीडायरेक्ट हैंडलिंग ब्राउज़र या पुस्तकालय द्वारा एप्लीकेशन कोड को परिणाम देखने से पहले किया जा सकता है। कैप्चर की तुलना करते समय ग्राहक और इसके डिफ़ॉल्ट को रिकॉर्ड करें।
Gzip संकुचन को परिभाषित करने वाले मानक
gzip फ़ॉर्मेट स्पेसिफिकेशन गैर-हानिकारक gzip डेटा प्रारूप को परिभाषित करता है। यह प्राथमिक स्रोत इस लेख में उपयोग की जाने वाली शब्दावली और सीमा को ठीक करता है, जबकि कार्यान्वयन व्यवहार को अभी भी चयनित ग्राहक और तैनाती में अवलोकन करने की आवश्यकता है।
DEFLATE स्पेसिफिकेशन gzip के भीतर उपयोग की जाने वाली संकुचन विधि को परिभाषित करता है। यह प्राथमिक स्रोत इस लेख में उपयोग की जाने वाली शब्दावली और सीमा को ठीक करता है, जबकि कार्यान्वयन व्यवहार को अभी भी चयनित ग्राहक और तैनाती में अवलोकन करने की आवश्यकता है।
HTTP सामग्री कोडिंग सेमांटिक्स gzip को एक HTTP सामग्री कोडिंग के रूप में परिभाषित करता है। यह प्राथमिक स्रोत इस लेख में उपयोग की जाने वाली शब्दावली और सीमा को ठीक करता है, जबकि कार्यान्वयन व्यवहार को अभी भी चयनित ग्राहक और तैनाती में अवलोकन करने की आवश्यकता है।
MDN का Content-Encoding संदर्भ वार्ता और डिकोडिंग क्षेत्रों को दिखाता है। यह प्राथमिक स्रोत इस लेख में उपयोग की जाने वाली शब्दावली और सीमा को ठीक करता है, जबकि कार्यान्वयन व्यवहार को अभी भी चयनित ग्राहक और तैनाती में अवलोकन करने की आवश्यकता है।
gzip कार्यान्वयन नियम
स्पष्ट रूप से gzip पर विचार करें, एन्कोडेड प्रस्तुति को सही ढंग से लेबल करें, कैश को भिन्न-देखने वाले रखें, और आदत से प्रत्येक मीडिया प्रकार को संकुचित करने के बजाय वास्तविक सामग्री को मापें।
उस नियम को एक स्वीकृति परीक्षण में डालें। यह बताएं कि कौन सा प्रतिभागी संकेत भेजता है, कौन सा प्रतिभागी इसे व्याख्या करता है, कौन से मध्यवर्ती पथ को बदल सकते हैं, और कौन सा सामग्री मार्कर सफलता को प्रमाणित करता है। यह Gzip संकुशन को एक अवलोकनीय प्रणाली का हिस्सा बनाता है न कि एक लेबल जो विफलता के बाद संलग्न किया गया है।
क्या आप सार्वजनिक वेब प्रतिक्रिया को मान्य करने के लिए तैयार हैं?
स्वीकृत सार्वजनिक सामग्री को प्राप्त करने के लिए Scrapeless Universal Scraping API का उपयोग करें और इस गाइड में वर्णित प्रतिनिधित्व समझौते की जांच करें।
आज साइन अप करें और प्राप्त करें $5 की मुफ्त क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं है.
अपने $5 क्रेडिट का दावा करें →अक्सर पूछे जाने वाले प्रश्न
क्या gzip संकुशन हानिरहित है?
हां। एक मान्य gzip डिकंप्रेशन मूल इनपुट बाइट्स को सही ढंग से पुनर्निर्माण करता है। प्रारूप में बिना संकुचित डेटा के लिए एक अखंडता जांच भी होती है।
क्या gzip वही है जो ZIP है?
नहीं। gzip एक संकुचित डेटा-स्ट्रीम प्रारूप है, जबकि ZIP एक संग्रह प्रारूप है जो कई फ़ाइलों और मेटाडेटा प्रविष्टियों को पैकेज कर सकता है।
ब्राउज़र gzip का अनुरोध कैसे करता है?
ब्राउज़र Accept-Encoding में Supported Codings का विज्ञापन करता है। एक सर्वर जो gzip का चयन करता है वह Content-Encoding: gzip लौटाता है, और ब्राउज़र आमतौर पर इसे पृष्ठ कोड को प्रकट करने से पहले प्रतिक्रिया को डिकोड करता है।
क्या चित्रों को gzip के साथ संकुचित किया जाना चाहिए?
आमतौर पर नहीं जब छवि प्रारूप पहले से प्रभावी संकुचन का उपयोग करता है। प्रतिनिधि फ़ाइलों को मापें क्योंकि एक और कोडिंग चरण CPU लागत जोड़ सकता है बिना उपयोगी ट्रांसफर बचत के।
क्यों कच्चे बाइट बिना पढ़ने योग्य लगते हैं?
Content-Encoding: gzip से चिह्नित एक प्रतिक्रिया में संकुचित बाइट होते हैं। मूल Content-Type के लिए पार्सर लागू करने से पहले या तो प्रतिनिधित्व को डिकोड करने वाला HTTP क्लाइंट या gzip डिकोडर का उपयोग करें।