2012-03-15 13 views
18

क्या सामान्य एचटीएमएल पेज उत्पन्न करते समय मैं यह हेडर सेट करता हूं तो क्या मुझे कोई फायदा होता है?सामग्री-लंबाई और अन्य HTTP शीर्षलेख?

मुझे लगता है कि वहाँ कुछ व्यवस्थाएं इस हेडर संपत्ति सेट हो जाएगा और मैं सोच रहा था क्यों ... (अन्य हेडर के साथ साथ, Content-Type: text/html की तरह)

ब्राउज़र तेजी से या बराबर साइट को लोड करता है? :)

पुनश्च:

ob_start(); 

... stuff here... 

$content = ob_get_contents(); 
$length = strlen($content); 

header('Content-Length: '.$length); 

echo $content; 
+0

नीचे सूचीबद्ध नहीं आपके प्रश्न का उत्तर? – Neysor

उत्तर

17

मुझे लगता है कि केवल HTTP स्पेक के कारण यह हर मामले में ऐसा करने के लिए कहता है।

एप्लिकेशन इस संदेश का उपयोग संदेश-शरीर की स्थानांतरण-लंबाई को इंगित करने के लिए करना चाहिए, जब तक कि यह धारा 4.4 में नियमों से प्रतिबंधित न हो।

आप Question of Deaomon पर at Pauls Answer भी देख सकते हैं।

मुझे लगता है कि यह आपके उत्तर भी देगा।

यदि आप किसी अन्य शीर्षलेख के साथ फ़ाइल डाउनलोड करना चाहते हैं तो आपको सामग्री-लंबाई का उपयोग करना चाहिए: उदा।

<?php 
$file = "original.pdf" 
$size = filesize($file); 
header('Content-type: application/pdf'); 
header("Content-length: $size"); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
readfile($file); 
?> 
2

मुख्य प्रेरणा के पीछे यह है HTTP 1.1 में एक मौजूदा TCP कनेक्शन को पुन: उपयोग करते हुए: वे इसे पसंद करते हैं। Content-Length यह निर्धारित कर सकता है कि प्राप्तकर्ता के लिए प्रतिक्रिया कहां समाप्त होती है। अन्य शीर्षकों के लिए, जैसे Content-Type जो एमआईएमई-प्रकार निर्दिष्ट करता है, वे प्राप्तकर्ता के लिए हैं ताकि वह जान सकें कि सामग्री के प्रकार के आधार पर परिणाम के साथ क्या करना है उदाहरण के लिए, फ़ायरफ़ॉक्स में आप निर्दिष्ट कर सकते हैं कि कौन सी कार्रवाई विभिन्न एमआईएमई प्रकारों के साथ प्रदर्शन करने के लिए। आप पॉप-अप कर सकते हैं ब्राउज़र की संवाद को बचाने या application/pdf

+0

क्या आप एक ही अनुरोध में दो पृष्ठों का अनुरोध करना चाहते हैं? – ellabeauty

+0

नहीं, वे एक ही टीसीपी कनेक्शन के संदर्भ में भेजे जाते हैं। अवधारणा को एक HTTP निरंतर कनेक्शन कहा जाता है। –

+0

हम्म लेकिन http 1.1 ब्राउज़र कनेक्शन में विकिपीडिया में जो पढ़ रहा हूं, उससे डिफ़ॉल्ट रूप से लगातार चल रहा है, तो क्या इसकी वास्तव में आवश्यकता है? – ellabeauty

11

की Content-Type साथ दर्शक में एक पीडीएफ खोलने यह मुझे किसी भी लाभ दे करता है अगर मैं जब सामान्य html पृष्ठों पैदा इस हेडर सेट?

साइट तेजी से या बराबर ब्राउज़र लोड करता है? :)

गतिशील पृष्ठों के लिए, आम तौर पर नहीं।Content-Length ग्राहक को यह जानने देता है कि फ़ाइल कितनी बड़ी है। हालांकि, अगर Content-Length निर्दिष्ट नहीं है, तो स्थानांतरण को खंडों में भेजा जाता है (एक विशेष खंड के साथ जो फ़ाइल के अंत को दर्शाता है)। पूर्व विधि का परिणाम तेजी से संचरण हो सकता है क्योंकि भाग में विभाजित होने के ऊपरी हिस्से को समाप्त कर दिया जाता है। हालांकि, यह आमतौर पर स्थैतिक फाइलों के लिए सबसे अच्छा आरक्षित होता है क्योंकि लंबाई को निर्धारित करने के लिए संसाधनों को Content-Length सेट करके प्राप्त किए गए किसी भी लाभ से अधिक हो सकता है।

+0

मैंने क्रोम से डेवलपर टूल में हेडर की जांच की, और मुझे लगता है कि सामग्री-लंबाई शीर्षलेख सेट है भले ही मैं इसे PHP में सेट न करूं। – ellabeauty

+3

यदि सामग्री की लंबाई ओएस/वेब सर्वर के बफर आकार से छोटी है, तो 'सामग्री-लंबाई' स्वचालित रूप से वेब सर्वर द्वारा शामिल की जाएगी। हालांकि, यदि लंबाई बफर से अधिक है, तो आप देखेंगे कि सामग्री की लंबाई नहीं भेजी जाएगी और इसके बजाय, 'स्थानांतरण-एन्कोडिंग: खंडित' का उपयोग किया जाएगा। – webbiedave

+0

क्या आप जानते हैं कि मैं कैसे पता लगा सकता हूं कि बफर आकार कितना है? – ellabeauty

2

कहाँ content-type: text/html का संबंध है, यह ग्राहक क्या उम्मीद करना और आम तौर पर कैसे फ़ाइल को संभालने के लिए बताने के लिए मुख्य रूप से है। बॉट्स के मामले में, यह एसईओ प्रयोजनों के लिए उपयोगी हो सकता है क्योंकि यह बॉट को बताता है कि किस प्रकार की फाइल यह देख रही है कि इसे कैसे बदल दिया जा सकता है।

content-length के मामले में, यह केवल क्लाइंट को यह जानने के लिए है कि फ़ाइल कितनी बड़ी उम्मीद करेगी और इस प्रकार प्रतिक्रिया समाप्त होती है।

0

सबसे अच्छा तरीका है एक दूरस्थ फ़ाइल का आकार होने का (जो मेरे लिए काम कर रहा है): सामग्री-लंबाई की स्थापना के लिए

$head = array_change_key_case(get_headers($file, TRUE)); 
$filesize = $head['content-length']; 
0

एक माना जाता है कि अच्छा इस्तेमाल होता है जब आप ग्राहक के लिए अपनी प्रतिक्रिया भेजने के लिए भले ही आप अभी भी अधिक समय लेने वाले परिचालनों को बाद में करना पसंद करते हैं।

this answer देखें जो बताता है कि आप सामग्री की लंबाई निर्धारित करेंगे, अपना आउटपुट लिखेंगे और फिर ग्राहक को अब तक प्रतीक्षा किए बिना आपकी स्क्रिप्ट में और संचालन कर सकते हैं।

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