2013-12-11 5 views
24

मैं URL के संबंध में सवाल है:पथ-अनुभाग में // के साथ एक यूआरएल मान्य है?

मैं पढ़ा है RFC 3986 और अभी भी एक सवाल है के बारे में एक यूआरएल:

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

मुझे पता है, कि //server.com:80/path/info मान्य है (यह एक स्कीमा सापेक्ष URL है)

मुझे यह भी पता है कि http://server.com:80/path//info मान्य है।

लेकिन मैं के बाद एक वैध है कि क्या यकीन नहीं है:

http://server.com:80//path/info 

मेरे सवाल के पीछे समस्या यह है कि एक कुकी नहीं भेज दिया जाता है है http://server.com:80//path/info, जब /path

के प्रतिबंध के साथ यूआरआई http://server.com:80/path/info द्वारा बनाई गई करने के लिए

उत्तर

21

url with multiple forward slashes, does it break anything?, Are there any downsides to using double-slashes in URLs?, What does the double slash mean in URLs? और RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax देखें।

आम सहमति: ब्राउज़र अनुरोध करेंगे, वे अनुरोध को नहीं बदलेंगे। / चरित्र पथ विभाजक है, लेकिन जैसा कि पथ के सेगमेंट के रूप में परिभाषित कर रहे हैं:

path-abempty = *("/" segment) 
segment  = *pchar 

मतलब http://example.com/ के बाद स्लैश सीधे एक और स्लैश, अनंत तक के बाद किया जा सकता है। सर्वर इसे अनदेखा कर सकते हैं, लेकिन ब्राउजर नहीं करते हैं, जैसा आपने पाया है।

वाक्यांश:

यूआरआई एक अधिकार घटक शामिल नहीं है, तो पथ दो स्लैश पात्रों के साथ शुरू नहीं कर सकते ("//")।

protocol-relative URLs के लिए अनुमति देता है, लेकिन विशेष रूप से उस मामले में कहा गया है कोई अधिकार (अपने उदाहरण में server.com:80) मौजूद हो सकता है।

तो: हाँ, यह मान्य है, नहीं, इसका उपयोग न करें।

+0

तो यह एक ब्राउज़र बग है, कि // पथ के लिए कुकी/पथ को नहीं भेजती है? –

+0

@ क्रिस्टियन एक बग नहीं है, '// path' '/ path' से'/foo/path' और '/// पथ' के रूप में अलग है। '// path' में कोई नाम नहीं होने पर" उपनिर्देशिका "है, जो मान्य है।इसलिए यदि आप '// path' के लिए कुकी सेट करते हैं, तो इसे'/path' से नहीं पढ़ा जा सकता है, न ही दूसरी तरफ। :) – CodeCaster

+1

कानूनी लगता है। मुझे लगता है कि अगर कोई अलग जवाब या राय है तो मैं एक या दो दिन इंतजार करूंगा और जवाब नहीं दूंगा। –

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