2011-05-14 18 views
9

RFC 2616 के अनुसार, जो HTTP/1.1 को परिभाषित करता है, Host: हेडर अनिवार्य है।HTTP होस्ट हेडर को कब परिभाषित किया जा सकता है?

किसी क्लाइंट में सभी HTTP/1.1 अनुरोध संदेशों में होस्ट हेडर फ़ील्ड शामिल होना चाहिए। , वर्तमान अनुरोध से हैडर अगर वहाँ एक है:

लेकिन PHP manual का तात्पर्य यह खाली हो सकता है कि:

'HTTP_HOST': होस्ट की सामग्री।

इस स्थिति में कौन सी स्थितियां हो सकती हैं, और इस प्रकार $_SERVER['HTTP_HOST'] खाली हो जाएं? क्या मेरा आवेदन वहां पर निर्भर करता है?

+0

'होस्ट:' हेडर अभी भी [HTTPbis] के अनुसार अनिवार्य है (http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-14#appendix-B.1.1) , लेकिन इसका मतलब यह नहीं है कि यह हमेशा उपस्थित रहेगा। अपाचे इसकी अनुपस्थिति को अच्छी तरह से संभालता है (हालांकि यह किसी भी कॉन्फ़िगर किए गए vhost तक नहीं पहुंच जाएगा)। – mario

+0

@ मारियो: क्या जंगली में वास्तविक HTTP/1.1 क्लाइंट हैं जो 'होस्ट:' हेडर नहीं भेजते हैं? – Tim

+2

मैं उन्हें वास्तविक ग्राहकों पर विचार नहीं करता, और निश्चित रूप से समकालीन ब्राउज़र और पुस्तकालयों में से कोई भी नहीं करता है। लेकिन किसी भी हस्तनिर्मित PHP स्क्रिप्ट हो सकता है। लेकिन फिर भी, यह ज्यादातर कॉन्फ़िगरेशन समस्या है, अपाचे vhosts के लिए प्रासंगिक नहीं है। Apache द्वारा HTTP_HOST को संरक्षित किया गया है, और मैं अभ्यास में खाली होने के बारे में चिंता नहीं करता। असंभव किनारे का मामला। – mario

उत्तर

13

यह HTTP 1.0 में खाली हो सकता है। यदि कोई होस्ट हेडर निर्दिष्ट नहीं है, तो वर्चुअल होस्टिंग बिल्कुल काम नहीं करेगा, इसलिए आपके वेब सर्वर में डिफ़ॉल्ट vhost का उपयोग किया जाएगा।

मैंने अभी यह परीक्षण किया है; Nginx के तहत PHP में $_SERVER['HTTP_HOST'] वैरिएबल वर्चुअल होस्ट के नाम पर सेट हो गया है, जो मेरे मामले में _ है। लेकिन यह Nginx में आपके fastcgi_params कॉन्फ़िगरेशन पर भी निर्भर करता है।

साझा होस्टिंग पर यह महत्वपूर्ण नहीं है क्योंकि डिफ़ॉल्ट vhost होस्टिंग कंपनी से कुछ जानकारी पृष्ठ पर सेट किया जाएगा, और इसलिए आपकी स्क्रिप्ट नहीं चल जाएगी। यद्यपि अपने सर्वर के लिए ध्यान में रखना एक अच्छी बात हो सकती है।

+0

"HTTP_HOST" के साथ क्या मतलब है? $ HTTP_HOST? –

+0

चार साल पहले से जवाब खोदने पर अच्छा काम! :-) मुझे इस समस्या को बिल्कुल याद नहीं है, लेकिन चूंकि मैंने PHP के साथ बहुत कुछ किया है, मुझे लगता है कि मेरा मतलब '$ _SERVER ['HTTP_HOST']' PHP चर है, जिसे संभवतः एक Nginx fastcgi_param के रूप में भेजा गया था। मेरे पास उस कॉन्फ़िगरेशन फ़ाइल को और नहीं छोड़ा गया है, लेकिन [यह] पढ़ना (http://stackoverflow.com/a/15414811/238978) SO उत्तर मुझे यकीन है कि यह '$ होस्ट 'Nginx चर हो सकता है। –

+0

उत्तर के लिए धन्यवाद! फिर, बस इसे स्पष्ट करने के लिए क्योंकि यह उत्तर में थोड़ा उलझन में है: nginx वर्चुअल होस्ट के नाम पर '$ http_host' सेट नहीं करता है, इसके बजाय, यह केवल मूल HTTP शीर्षलेख फ़ील्ड" होस्ट "की प्रतिलिपि बनाता है । और यदि यह खाली है, जैसा कि '$ http_host' है। –

6

क्रॉलर्स (उदा। Google), स्क्रैपर्स या यहां तक ​​कि पूरी तरह से कानूनी स्क्रिप्ट्स आपके एपीआई के साथ इंटरफेसिंग कर सकते हैं गलती से या अज्ञान रूप से होस्ट हेडर को छोड़ सकते हैं।

मैंने यह उत्तर जोड़ा क्योंकि यह प्रश्न Google पर आया जब मैंने एक ही चीज़ की तलाश की।

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

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