क्या एक URL में एक स्थान सम्‍मिलित है?


132

क्या एक यूआरआई (विशेष रूप से एक HTTP URL) में एक या एक से अधिक स्थान अक्षर रखने की अनुमति है? यदि एक URL को इनकोड किया जाना चाहिए, तो क्या यह +आमतौर पर अनुसरण किया जाने वाला सम्मेलन है, या एक वैध विकल्प है?

विशेष रूप से, क्या कोई आरएफसी को इंगित कर सकता है जो इंगित करता है कि अंतरिक्ष वाला URL एन्कोडेड होना चाहिए?

प्रश्न के लिए प्रेरणा: एक वेब साइट का बीटा-परीक्षण करते समय, मैंने नोट किया कि उनमें कुछ URL का निर्माण रिक्त स्थान के साथ किया गया था। फ़ायरफ़ॉक्स सही काम करने लगा, जिसने मुझे चौंका दिया! लेकिन मैं डेवलपर्स को एक RFC को इंगित करने में सक्षम होना चाहता था ताकि उन्हें उन URL को ठीक करने की आवश्यकता महसूस हो।


सुपरसेट जो बाद में आया: सभी अमान्य वर्ण क्या हैं: stackoverflow.com/questions/1547899/…
Ciro Santilli 郝海东 later later later 法轮功

जवाबों:


101

आरएफसी 1738 के अनुसार :

असुरक्षित:

वर्ण कई कारणों से असुरक्षित हो सकते हैं। अंतरिक्ष वर्ण असुरक्षित है क्योंकि महत्वपूर्ण स्थान गायब हो सकते हैं और महत्वहीन स्थान तब पेश किए जा सकते हैं जब URL को स्थानांतरित या टाइपसेट या वर्ड-प्रोसेसिंग कार्यक्रमों के उपचार के अधीन किया जाता है। वर्ण "<"और ">"असुरक्षित हैं क्योंकि उन्हें मुफ्त पाठ में URL के चारों ओर सीमांकक के रूप में उपयोग किया जाता है; उद्धरण चिह्न ( """) का उपयोग कुछ प्रणालियों में URL को परिसीमन करने के लिए किया जाता है। यह चरित्र "#"असुरक्षित है और इसे हमेशा एन्कोड किया जाना चाहिए क्योंकि इसका उपयोग वर्ल्ड वाइड वेब और अन्य प्रणालियों में एक URL को एक टुकड़ा / एंकर पहचानकर्ता से परिसीमित करने के लिए किया जाता है जो इसका अनुसरण कर सकते हैं। चरित्र"%"असुरक्षित है क्योंकि इसका उपयोग अन्य वर्णों के एन्कोडिंग के लिए किया जाता है। अन्य वर्ण असुरक्षित हैं क्योंकि गेटवे और अन्य परिवहन एजेंट कभी-कभी ऐसे वर्णों को संशोधित करने के लिए जाने जाते हैं। ये अक्षर हैं "{", "}", "|", "\", "^", "~", "[", "]", और "`"

सभी असुरक्षित वर्णों को हमेशा URL के भीतर एन्कोड किया जाना चाहिए । उदाहरण के लिए, वर्ण "#"को उन सिस्टमों में भी URL के भीतर एन्कोड किया जाना चाहिए , जो आमतौर पर टुकड़े या एंकर आइडेंटिफ़ायर से नहीं निपटते हैं, ताकि यदि URL को किसी अन्य सिस्टम में कॉपी किया जाए जो उनका उपयोग करता है, तो URL एन्कोडिंग को बदलना आवश्यक नहीं होगा।


2
1738 को 2396 तक बढ़ाया गया है। ietf.org/rfc/rfc2396.txt वर्तमान उड़ी विनिर्देश है। हालांकि इस मामले में कोई फर्क नहीं पड़ता।
स्टीव सेवरेंस

40
और 2396 को 3986 से अलग कर दिया गया है। कई लोगों को यह गलत लगता है, क्योंकि RFC अपरिवर्तनीय हैं, और इस तरह पाठक को यह नहीं बताते हैं कि उनका पालन किया गया है। संकेत: tools.ietf.org/html/rfcnnnn , जैसे tools.ietf.org/html/rfc2396 का उपयोग करें, यह शीर्ष पर लापता मेटाडेटा प्रदर्शित करता है।
जूलियन रेश्च

43

इसे कूटबद्ध क्यों करना पड़ता है? एक अनुरोध इस तरह दिखता है:

GET /url HTTP/1.1
(Ignoring headers)

एक सफेद स्थान द्वारा अलग किए गए 3 क्षेत्र हैं। यदि आप अपने url में स्थान रखते हैं:

GET /url end_url HTTP/1.1

आपको पता है कि 4 क्षेत्र हैं, HTTP सर्वर आपको बताएगा कि यह एक अवैध अनुरोध है।

GET /url%20end_url HTTP/1.1

3 फ़ील्ड => मान्य

नोट: क्वेरी स्ट्रिंग (बाद?) में, एक स्थान आमतौर पर + के रूप में एन्कोड किया गया है

GET /url?var=foo+bar HTTP/1.1 

बजाय

GET /url?var=foo%20bar HTTP/1.1 

क्या होगा अगर var वास्तव में "foo + bar" है और "foo bar" नहीं है?
Ivo3185

2
मैं तर्क दूंगा कि ट्रांसपोर्ट लेयर की जरूरत है, यूआरआई स्पेसिफिकेशन की नहीं। GET स्पष्ट रूप से http: विनिर्देश की एक संपत्ति है, URL विनिर्देश नहीं। इसी तरह आप url में उद्धरण "तर्क" कर सकते हैं क्योंकि वेब पेज टूट जाएंगे। लेकिन यह HTML स्वरूपण सीमाओं की एक संपत्ति है, (जो अन्य रणनीतियों के खिलाफ हैं), URL विनिर्देश की संपत्ति नहीं है।
केंट फ्रेड्रिक

ietf.org/rfc/rfc1738.txt - अंतरिक्ष सहित असुरक्षित अक्षर) को एन्कोड किया जाना चाहिए
जुलिएन

@KentFredric यह संभवतया प्रस्तुति परत है, परिवहन परत नहीं। जैसा कि जूलियन (लगभग) लिखते हैं, मूल यूआरआई कल्पना ( आरएफसी 1630 ) में यह प्रतिबंध है, इसलिए यह आपकी व्यक्तिगत भावनाओं की परवाह किए बिना स्वयं यूआरआई विनिर्देश का एक हिस्सा है। चूंकि यूआरआई कल्पना के बाद लिखा गया था HTTP ड्राफ्ट के , इसलिए यह बहुत संभव है कि URI को HTTP के साथ डिजाइन किया गया था, जिसमें रिक्त स्थान के उपयोग के खिलाफ निषेध भी शामिल था, लेकिन यह वास्तव में कोई फर्क नहीं पड़ता है, है ना? सच तो यह है कि युक्ति वही है जो कल्पना है।
क्रिस्टोफर

38

छोटा उत्तर: नहीं, आपको एक स्थान को एनकोड करना होगा; यह है के रूप में एक अंतरिक्ष सांकेतिक शब्दों में बदलना करने के लिए सही +है, लेकिन केवल क्वेरी स्ट्रिंग में; पथ में आप का उपयोग करना चाहिए %20


1
नमस्ते, मैं भी भ्रमित हूं, कभी-कभी मैंने पुस्तक का उपयोग "+" देखा, लेकिन कभी-कभी "% 20", क्या आप इसके लिए कुछ उदाहरण दिखा सकते हैं? जब उपयोगकर्ता फॉर्म जमा करता है, तो फॉर्म कैसे अंतरिक्ष को एनकोड करता है? किस पात्र के साथ?
GMsoF

1
अतिरिक्त विस्तार के लिए यह उत्तर देखें ।
डेविडआरआर

टुकड़ा / हैश भाग के बारे में क्या? वहां रिक्त स्थान कैसे एन्कोड किए जाने चाहिए?
गमकिंस

@gumkins: टुकड़ा (# और बाद) सर्वर पर नहीं भेजा जाता है। व्यवहार में, आप किसी स्थान को एन्कोड करने के लिए कहीं भी% 20 या + का उपयोग कर सकते हैं।
जुलिएन

9

URL RFC 3986 में परिभाषित किए गए हैं, हालाँकि अन्य RFC प्रासंगिक हैं लेकिन RFC 1738 हैं अप्रचलित है।

उनके पास कई अन्य पात्रों के साथ, उनमें स्थान नहीं हो सकता है। चूंकि उन निषिद्ध पात्रों को अक्सर किसी न किसी तरह से प्रतिनिधित्व करने की आवश्यकता होती है, इसलिए उन्हें "%" उपसर्ग के साथ अपने ASCII हेक्साडेसिमल समकक्ष के साथ अनुवाद करके URL में एन्कोडिंग के लिए एक योजना है।

अधिकांश प्रोग्रामिंग लैंग्वेज / प्लेटफॉर्म URL को एन्कोडिंग और डिकोड करने के लिए फ़ंक्शंस प्रदान करते हैं, हालांकि वे RFC मानकों का ठीक से पालन नहीं कर सकते हैं। उदाहरण के लिए, मुझे पता है कि PHP नहीं करता है।


7

हां, अंतरिक्ष आमतौर पर "% 20" के लिए एन्कोड किया गया है। किसी भी पैरामीटर जो URL पर जाते हैं, उन्हें केवल सुरक्षा कारणों से एन्कोड किया जाना चाहिए।


6

URL में स्पेस कैरेक्टर हो सकते हैं और उन्हें अधिकांश ब्राउज़रों में% 20 के रूप में प्रदर्शित किया जाएगा, लेकिन ब्राउज़र एन्कोडिंग नियम काफी बार बदलते हैं और हम इस बात पर निर्भर नहीं कर सकते कि ब्राउज़र URL कैसे प्रदर्शित करेगा।

इसलिए इसके बजाय आप URL में स्पेस कैरेक्टर को किसी भी वर्ण के साथ बदल सकते हैं जो आपको लगता है कि URL को अधिक पठनीय और 'सुंदर' बना देगा;) ..... ओ सामान्य वर्ण जो पसंद किए जाते हैं, वे "-", "_" हैं, "+" .... लेकिन ये मजबूरी नहीं हैं इसलिए यू किसी भी ऐसे पात्र का उपयोग कर सकते हैं जो पहले से URL में नहीं होना चाहिए।

कृपया URL स्पेस कैरेक्टर रिप्लेसमेंट के रूप में%, &,}, {,], [, /,>, <, से बचें क्योंकि वे कुछ ब्राउज़रों और प्लेटफार्मों पर एक त्रुटि खींच सकते हैं।

जैसा कि आप देख सकते हैं कि स्टैक ओवरफ्लो स्वयं स्पेस (% 20) प्रतिस्थापन के रूप में '-' वर्ण का उपयोग करता है।

हैप्पी प्रश्न करना।


5

उरल्स में रिक्त स्थान नहीं होना चाहिए । यदि आपको ऐसा करने की आवश्यकता है, तो इसके एन्कोडेड मान का उपयोग करें%20


5

क्या कोई RFC को इंगित कर सकता है कि यह इंगित करता है कि किसी स्पेस वाले URL को एन्कोड किया जाना चाहिए?

URI, और इस प्रकार URL, RFC 3986 में परिभाषित हैं।

यदि आप वहाँ पर परिभाषित व्याकरण को देखते हैं, तो आप अंततः ध्यान देंगे कि एक अंतरिक्ष वर्ण कभी भी एक वाक्यविन्यास कानूनी URL का हिस्सा नहीं हो सकता है, इस प्रकार "URL विथ अ स्पेस" अपने आप में एक विरोधाभास है।


3

तुम्हारे प्रश्न का उत्तर देने के लिए। मैं कहूंगा कि URL में उपयोग किए जाने वाले मानों में रिक्त स्थान को बदलने के लिए अनुप्रयोगों के लिए यह काफी सामान्य है। इसका कारण यह है कि प्रतिशत (URI) एन्कोडिंग को पढ़ने के लिए और अधिक कठिन से बचने के लिए ussually है।

प्रतिशत-एन्कोडिंग के बारे में इस विकिपीडिया लेख को देखें ।


2

फ़ायरफ़ॉक्स 3 %20पता बार में रिक्त स्थान के रूप में URL में प्रदर्शित होगा ।


यह बहुत सीधे सवाल का उचित जवाब नहीं है "Is a URL allowed to contain a space?":। बल्कि एक टिप्पणी।
रोको सी। बुल्जन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.