HTTP हेडर में "सामग्री-लंबाई" फ़ील्ड क्या है?


282

इसका क्या मतलब है?

  1. हैडर में निर्दिष्ट एन्कोडिंग के साथ एन्कोडेड कंटेंट स्ट्रिंग की बाइट काउंट।
  2. सामग्री स्ट्रिंग की वर्ण गणना।

खासकर के मामले में Content-Type: application/x-www-form-urlencoded

जवाबों:


239

rfc2616

सामग्री-लंबाई इकाई-हेडर फ़ील्ड इकाई-निकाय के आकार को इंगित करता है, OCTETs की दशमलव संख्या में, प्राप्तकर्ता को भेजा जाता है या, HEAD पद्धति के मामले में, इकाई-निकाय का आकार जो भेजा गया होता। अनुरोध एक GET रहा है।

इससे कोई फर्क नहीं पड़ता कि सामग्री-प्रकार क्या है।

नीचे पोस्ट पर विस्तार ।


14
टॉम कैबंस्की के जवाब के साथ इस उत्तर को मिलाएं और आपके पास आवश्यक सभी जानकारी है। पाठ के मामले में आप अक्षरों की संख्या की गणना कर सकते हैं क्योंकि ASCII 8 बिट है।
hcpl

9
@hcpl: लेकिन पाठ जरूरी हमेशा ASCII नहीं है, यह भी ASCII 7 बिट, नहीं 8. है
झूठ रयान

2
ASCII को उस एन्कोडिंग से बदलें जो आप उपयोग कर रहे हैं और एन्कोडिंग के लिए आवश्यक बिट्स की संख्या देखें। 7 बनाम 8 बिट प्रतिक्रिया के लिए; मूल रूप से यह 7 बिट वास्तव में था इसलिए आप फिर से सही हैं। लेकिन आज 8 बिट्स का उपयोग अधिकांश (यदि नहीं तो) मामलों में किया जाता है क्योंकि जिस तरह से कंप्यूटर मेमोरी का आयोजन किया जाता है। संपादित करें: मेरे उत्तर को पुन: प्रस्तुत करते हुए मैं देखता हूं कि आप कहां जा रहे हैं। मुझे अपनी मूल टिप्पणी को फिर से लिखना चाहिए।
hcpl

6
@hcpl: बाइट्स बनाम वर्ण समस्या का संपूर्ण कारण, UTF-8 और UTF-16 जैसे चर चौड़ाई एन्कोडिंग के कारण है जहां "बिट्स की संख्या" निश्चित नहीं है।
स्टेफानकारपिंस्की

2
क्या आप इस संख्या को बना सकते हैं? POST की तरह एक स्ट्रिंग पैराम बड़ी लंबाई के साथ लेकिन आपकी सामग्री-लंबाई 1 पर सेट करें?
शिह-मिन ली

260

यह अनुरोध या प्रतिक्रिया के शरीर में डेटा के बाइट्स की संख्या है। शरीर वह हिस्सा है जो हेडर के नीचे रिक्त रेखा के बाद आता है।


1
"अनुरोध या प्रतिक्रिया" के बजाय, क्या यह केवल "प्रतिक्रिया का शरीर" नहीं है? अनुरोध में शीर्ष लेख और डेटा के बीच एक रिक्त रेखा नहीं है।
ajfbiw.s

क्या मैं जावा फिल्टर में दायर HTTP प्रतिक्रिया हेडर कंटेंट की लंबाई को बदल सकता हूं
किटीस सेप्ट

2
@ ajfbiw.s http पोस्ट अनुरोध पर विचार करें। "अनुरोध के संदेश-शीर्षलेख में सामग्री-लंबाई या स्थानांतरण-एन्कोडिंग शीर्ष लेख फ़ील्ड के शामिल होने से एक अनुरोध में संदेश-निकाय की उपस्थिति w3.org/Protocols/rfc2616/sfc2616-sec4.html#
रॉय

68

Content-Lengthहैडर एक नंबर एक को संकेतित करते HTTP शरीर का सही बाइट लंबाई है। HTTP निकाय पहली खाली लाइन के तुरंत बाद शुरू होता है जो स्टार्ट-लाइन और हेडर के बाद मिलती है।

आमतौर पर Content-Lengthहेडर का उपयोग HTTP 1.1 के लिए किया जाता है ताकि प्राप्त करने वाले पक्ष को पता चल जाए कि वर्तमान प्रतिक्रिया * समाप्त हो गई है, इसलिए कनेक्शन को दूसरे अनुरोध के लिए पुन: उपयोग किया जा सकता है

* या अनुरोध, उन तरीकों के मामले में जिनमें शरीर है, जैसे कि POST, PUT या PATCH

वैकल्पिक रूप से, Content-Lengthहेडर को छोड़ा जा सकता है और एक कटा हुआ Transfer-Encodingहेडर का उपयोग किया जा सकता है।

यदि दोनों Content-Lengthऔर Transfer-Encodingहेडर गायब हैं, तो प्रतिक्रिया के अंत में कनेक्शन बंद होना चाहिए।

निम्नलिखित संसाधन एक गाइड है जो मैंने HTTP के बारे में सीखते समय बहुत उपयोगी पाया:

HTTP मेड वास्तव में आसान है


45

एक ऑक्टेट 8 बिट्स है। सामग्री-लंबाई ओक्टेट्स की संख्या है जो संदेश शरीर का प्रतिनिधित्व करता है।


37
ऑक्टेट = एके बाइट?
ViniciusPires

77
@ViniciusPires 'बाइट' का उपयोग आमतौर पर स्मृति की सबसे छोटी पता योग्य इकाई का वर्णन करने के लिए किया जाता है, जो सभी आर्किटेक्चर पर 8 बिट्स आवश्यक नहीं है। इसीलिए किसी भी अस्पष्टता से बचने के लिए 'ऑक्टेट' का उपयोग किया जाता है
PJK

6
@PJK, नहीं, बिल्कुल सही नहीं हैOCTETयहाँ एक बहुत ही विशिष्ट अर्थ है जिसका अर्थ है <डेटा का कोई 8-बिट अनुक्रम>। परिभाषा w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
पेसियर

28

यहाँ से :

सामग्री-लंबाई इकाई-हेडर फ़ील्ड इकाई-निकाय के आकार को इंगित करता है, OCTETs की दशमलव संख्या में, प्राप्तकर्ता को भेजा जाता है या, HEAD पद्धति के मामले में, इकाई-निकाय का आकार जो भेजा गया होता। अनुरोध एक GET रहा है।

   Content-Length    = "Content-Length" ":" 1*DIGIT

एक उदाहरण है

   Content-Length: 3495

अनुप्रयोग SHOULD इस फ़ील्ड का उपयोग संदेश-निकाय की हस्तांतरण-लंबाई को इंगित करने के लिए करता है, जब तक कि यह खंड 4.4 में नियमों द्वारा निषिद्ध नहीं है ।

शून्य से अधिक या उसके बराबर कोई भी सामग्री-लंबाई एक मान्य मूल्य है। यदि सामग्री-लंबाई नहीं दी गई है तो धारा 4.4 संदेश-निकाय की लंबाई निर्धारित करने का तरीका बताती है।

ध्यान दें कि इस क्षेत्र का अर्थ MIME में संबंधित परिभाषा से काफी अलग है, जहां यह "संदेश / बाहरी-निकाय" सामग्री-प्रकार के भीतर उपयोग किया जाने वाला एक वैकल्पिक क्षेत्र है। HTTP में, यह भेजा जाना चाहिए जब भी संदेश की लंबाई को स्थानांतरित किए जाने से पहले निर्धारित किया जा सकता है, जब तक कि यह खंड 4.4 में नियमों द्वारा निषिद्ध न हो।

मेरी व्याख्या यह है कि इसका अर्थ है "तार पर" लंबाई, अर्थात * एन्कोडेड सामग्री की लंबाई


7
"तार पर", संपीड़न के आधार पर लंबाई बदल दी जाएगी, लेकिन संपीड़ित होने से पहले लंबाई कहना सही है।
21

क्या सामग्री-लंबाई मैक / लिनक्स जैसी विभिन्न प्रकार की मशीनों पर भिन्न होगी? या कर्ल / पोस्टमैन जैसे विभिन्न क्लाइंट का उपयोग करते समय यह अलग होगा ...?
काणागावेलु सुगुमार

1
अन्य सभी को समान मानते हुए (जैसे एन्कोडिंग, कम्प्रेशन, इत्यादि) तब सामग्री की लंबाई प्लेटफ़ॉर्म स्वतंत्र होनी चाहिए। यह सर्वर से एक हेडर है, इसलिए यह मानते हुए कि यह उपयोगकर्ता-एजेंट को सूँघता नहीं है और अलग तरह से व्यवहार करता है, ग्राहक को कोई फर्क नहीं पड़ना चाहिए।
डेनियल रेनशॉ

टाइपस्क्रिप्ट इस पर एक त्रुटि फेंकते हैं। टाइप करने के लिए 'नंबर' टाइप करने योग्य नहीं है स्ट्रिंग [] 'इसलिए इसका उदाहरण होगा"Content-length": "3495"
A. D'Alfonso

8

से यह पेज

POST का अब तक का सबसे आम उपयोग, सीजीआई लिपियों में HTML फॉर्म डेटा जमा करना है। इस स्थिति में, सामग्री-प्रकार: शीर्षलेख आमतौर पर एप्लिकेशन / x-www-form-urlencoded है, और सामग्री-लंबाई: शीर्षलेख URL-एन्कोडेड प्रपत्र डेटा की लंबाई देता है (यहां URL-एन्कोडिंग पर एक नोट है)। CGI स्क्रिप्ट STDIN के माध्यम से संदेश निकाय प्राप्त करता है, और इसे डीकोड करता है। यहां POST का उपयोग करते हुए एक विशिष्ट फॉर्म सबमिट किया गया है:

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

5

युक्ति के अनुसार :

सामग्री-लंबाई इकाई-हेडर फ़ील्ड इकाई-निकाय के आकार को इंगित करता है, OCTETs की दशमलव संख्या में, प्राप्तकर्ता को भेजा जाता है या, HEAD पद्धति के मामले में, इकाई-निकाय का आकार जो भेजा गया होता। अनुरोध एक GET रहा है।

Content-Length    = "Content-Length" ":" 1*DIGIT

एक उदाहरण है

Content-Length: 3495

अनुप्रयोग SHOULD इस फ़ील्ड का उपयोग संदेश-निकाय की हस्तांतरण-लंबाई को इंगित करने के लिए करता है, जब तक कि यह खंड 4.4 में नियमों द्वारा निषिद्ध नहीं है।

शून्य से अधिक या उसके बराबर कोई भी सामग्री-लंबाई एक मान्य मूल्य है। यदि सामग्री-लंबाई नहीं दी गई है तो धारा 4.4 संदेश-निकाय की लंबाई निर्धारित करने का तरीका बताती है।

ध्यान दें कि इस क्षेत्र का अर्थ MIME में संबंधित परिभाषा से काफी अलग है, जहां यह "संदेश / बाहरी-निकाय" सामग्री-प्रकार के भीतर उपयोग किया जाने वाला एक वैकल्पिक क्षेत्र है। HTTP में, यह भेजा जाना चाहिए जब भी संदेश की लंबाई को स्थानांतरित किए जाने से पहले निर्धारित किया जा सकता है, जब तक कि यह खंड 4.4 में नियमों द्वारा निषिद्ध न हो।


2

सामग्री-लंबाई इकाई-हेडर फ़ील्ड इकाई-निकाय के आकार को इंगित करता है, OCTETs की दशमलव संख्या में, प्राप्तकर्ता को भेजा जाता है या, HEAD पद्धति के मामले में, इकाई-निकाय का आकार जो भेजा गया होता। अनुरोध एक GET रहा है।

सामग्री-लंबाई = "सामग्री-लंबाई" ":" 1 * DIGIT

एक उदाहरण है

कंटेंट-लंबाई: 1024

संदेश-शरीर के स्थानांतरण-लंबाई को इंगित करने के लिए अनुप्रयोग SHOULD इस क्षेत्र का उपयोग करते हैं।

PHP में आप कुछ इस तरह का उपयोग करेंगे।

header("Content-Length: ".filesize($filename));

"सामग्री-प्रकार: अनुप्रयोग / x-www-form-urlencoded" के मामले में एन्कोडेड डेटा को नामित एजेंट को भेजा जाता है ताकि आप उस डेटा की लंबाई या आकार निर्धारित कर सकें जिस पर आप पोस्ट करने जा रहे हैं।


0

विचार करें कि क्या आपके पास हेडर हैं:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

सामग्री-लंबाई के आकार है संकुचित संदेश के मुख्य भाग, "ओक्टेट्स" (यानी 8 बिट है, जो होना होता है की इकाइयों में सभी आधुनिक कंप्यूटरों के लिए "बाइट") में।

वास्तविक संदेश निकाय का आकार कुछ और हो सकता है, शायद 150280 बाइट्स।

वर्णों की संख्या फिर से भिन्न हो सकती है, शायद 150231 वर्ण, क्योंकि कुछ यूनिकोड वर्ण एकाधिक बाइट्स का उपयोग करते हैं (ध्यान दें UTF-8 एक मानक एन्कोडिंग है)।

इसलिए, इस बात पर निर्भर करते हुए कि आप कितना डेटा ट्रांसमिट करते हैं, या कितना डेटा आयोजित किया जाता है, या कितने सिंबल देखे जाते हैं, इस पर निर्भर करता है। बेशक, इस बात की कोई गारंटी नहीं है कि ये हेडर प्रदान किए जाएंगे।

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