2010-01-12 16 views
88

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

http://site/gwturl#section1/section2 

कुछ वर्गों अतिरिक्त गुण की आवश्यकता हो सकती है, जो हम : के साथ निर्दिष्ट करना चाहते हैं, ताकि यूआरएल के अनुभाग भाग स्पष्ट हों। कोड : पर तो / पर पहले विभाजित होता है,, इस तरह:

http://site/gwturl#user:45/comments 
बेशक

, हम यूआरएल-मित्रता के लिए यह कर रहे हैं, इसलिए हम यह सुनिश्चित करें कि इन पात्रों में से कोई भी जो आयोजन करेगा करना चाहते हैं विशेष अर्थ url- एन्कोडेड ब्राउज़र द्वारा, या किसी अन्य प्रणाली हो जाएगा, और इस तरह एक यूआरएल के साथ अंत:

http://site/gwturl#user%3A45/comments <--- BAD 

इस तरह से पेट के का उपयोग कर रहा है सुरक्षित (जिसके द्वारा मेरा मतलब नहीं होगा स्वचालित रूप से एन्कोड किया गया) ब्राउज़र, बुकमार्किंग सिस्टम, यहां तक ​​कि जावास्क्रिप्ट या जावा कोड के लिए भी?

+0

हो सकता है कि यह एक अच्छा विचार (अधिक स्पष्ट रूप से) निर्दिष्ट करने के लिए कि आप क्लाइंट-साइड केवल पर URL का उपयोग है? चूंकि बहुत सारे उत्तरों (जैसा कि मेरा किया गया) मानते हैं कि आप HTTP का उपयोग कर सर्वर पर यूआरएल भेजने जा रहे हैं। – Veger

+0

स्पष्टीकरण जोड़ने के लिए संपादित किया गया है कि खंड के उपयोग क्लाइंट-साइड पर हो रहा है। – Nicole

+0

मैं उत्सुक हूं: 10 महीनों के बाद, क्या यह यूआरएल योजना आपके लिए काम करती है? मैं एक ही योजना का उपयोग करने पर विचार कर रहा हूं। –

उत्तर

66

मैं हाल ही में wrote एक यूआरएल एनकोडर के बाद है से कनेक्ट किया जाता है, तो यह मेरे मन में बहुत ताजा है।

http://site/gwturl#user:45/comments

fragment part (user:45/comments) के सभी पात्र RFC 3986 URI के लिए पूरी तरह से कानूनी है।

ABNF के प्रासंगिक भागों:

fragment  = *(pchar/"/"/"?") 
pchar   = unreserved/pct-encoded/sub-delims/":"/"@" 
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 
pct-encoded = "%" HEXDIG HEXDIG 
sub-delims = "!"/"$"/"&"/"'"/"("/")" 
       /"*"/"+"/","/";"/"=" 
इन प्रतिबंधों से

अलावा, टुकड़ा भाग एक अपने आवेदन में यह देता है परे कोई परिभाषित संरचना है। योजना, http, केवल यह कहती है कि आप इस भाग को सर्वर पर नहीं भेजते हैं।


संपादित करें:

डी 'ओह!

यूआरआई कल्पना के बारे में मेरे दावे के बावजूद, irreputable जब he points out कि एचटीएमएल 4 कल्पना तत्व नाम/पहचानकर्ता को प्रतिबंधित करता है सही जवाब देता है।

ध्यान दें कि पहचानकर्ता नियम changing in HTML 5 हैं। यूआरआई प्रतिबंध अभी भी लागू होंगे (लेखन के समय, यूआरआई 5 के यूआरआई के उपयोग के आसपास कुछ अनसुलझे मुद्दे हैं)।

+0

मुझे लगता है कि आप कुछ पर हैं, क्या आप इसे थोड़ा और समझा सकते हैं? सर्वर पर इसे नहीं भेजना कोई मुद्दा नहीं है, क्योंकि हम जीडब्ल्यूटी का उपयोग कर रहे हैं। मुझे यकीन नहीं है कि आपके द्वारा उद्धृत अनुभाग द्वारा निर्दिष्ट वाक्यविन्यास पर मैं स्पष्ट हूं। – Nicole

+0

लेकिन ':' एक जेन-डेलीम है, उप-डेलीम नहीं। – bobince

+1

सेमी-कोलन एक पंच के लिए कानूनी है, इसलिए चाहे वह सब-डेलीम या जेन-डेलीम में है, कोई समस्या नहीं है – Veger

6

मैं इस पर भरोसा नहीं करता। यह कई उपयोगकर्ता-एजेंटों द्वारा %3A के रूप में एन्कोडेड यूआरएल प्राप्त होगा।

+5

* कई * उपयोगकर्ता एजेंट? – arbales

+1

@arbales: हाँ। कुछ कम अनुपालन वाले उपयोगकर्ता-एजेंट गैर-अनुपालन वाले यूआरएल को अनजान छोड़ देंगे। – Asaph

4

URLEncoder जावाडोक से:

के बारे में HTML प्रपत्र एन्कोडिंग अधिक जानकारी के लिए, एचटीएमएल specification से परामर्श करें।

जब एक स्ट्रिंग एन्कोडिंग, निम्नलिखित नियम लागू होते हैं:

  • अक्षरांकीय अक्षर "Z", "ए" "Z" के माध्यम से और "0" के माध्यम से "एक" "9" के माध्यम से रहते हैं वही।
  • विशेष वर्ण "।", "-", "*", और "_" वही रहता है।
  • स्पेस वर्ण "" को प्लस साइन "+" में परिवर्तित कर दिया गया है।
  • अन्य सभी वर्ण असुरक्षित हैं और पहले कुछ एन्कोडिंग योजना का उपयोग कर एक या अधिक बाइट्स में परिवर्तित हो गए हैं। फिर प्रत्येक बाइट को 3-वर्ण स्ट्रिंग "% xy" द्वारा का प्रतिनिधित्व किया जाता है, जहां xy दो अंकों वाले हेक्साडेसिमल बाइट का प्रतिनिधित्व करता है। उपयोग करने के लिए अनुशंसित एन्कोडिंग योजना यूटीएफ -8 है। हालांकि, संगतता कारणों से, यदि कोई एन्कोडिंग निर्दिष्ट नहीं है, तो प्लेटफ़ॉर्म के डिफ़ॉल्ट एन्कोडिंग का उपयोग किया जाता है।

है, : सुरक्षित नहीं है।

-1

कॉलन सुरक्षित नहीं है। See here

+0

वह पृष्ठ प्रेरित नहीं करता है कि वे सुरक्षित क्यों नहीं हैं। संदर्भित [आरएफसी 2396] (http://www.rfc-editor.org/rfc/rfc2396.txt) यह नहीं कहता कि इसे या तो बच जाना चाहिए। साथ ही, प्रदान की गई कनवर्टर स्क्रिप्ट इसे एन्कोड नहीं करती है (वैसे भी क्रोम 9 में)। –

3

मुझे फ़ायरफ़ॉक्स या IE8 कुछ विकिपीडिया URLs एन्कोडिंग नहीं दिख रहा है जिसमें चरित्र शामिल है।

+1

ओपेरा भी सेमी-कोलन रखता है, लेकिन इस तरह के व्यवहार पर गिनती करना – Veger

+1

करने के लिए अच्छी बात नहीं है, रेनेसिस यूआरएल के टुकड़े के बारे में बात कर रहा है, न कि यूआरएल पथ। इस प्रश्न को लिखते समय – Gumbo

+0

विकिपीडिया मेरे विचारों में से एक था। क्या इसका उपयोग तांबे का तकनीकी रूप से अमान्य/असुरक्षित है? मैं आमतौर पर विकिपीडिया यूआरएल एन्कोड किए गए (और) को देखता हूं, लेकिन कभी भी कोलन नहीं, जिसने मुझे थोड़ा उलझन में छोड़ दिया। – Nicole

-4

यह एक सुरक्षित चरित्र नहीं है और अलग करने के लिए क्या बंदरगाह आप जब यह सही अपने डोमेन नाम

3

प्रोटोकॉल को प्रमाणीकरण की आवश्यकता होने पर उपयोगकर्ता नाम और पासवर्ड के बीच विभाजन के रूप में उपयोग किया जाता है।

49

यूआरआई मानक पर मैकडॉवेल के विश्लेषण के अलावा, यह भी याद रखें कि टुकड़ा वैध HTML एंकर नाम होना चाहिए। http://www.w3.org/TR/html4/types.html#type-name

आईडी और नाम टोकन के अनुसार एक पत्र के साथ शुरू होगा ([a-zA-Z]) और अक्षर, अंक ([0-9]), हाइफ़न के किसी भी संख्या से पालन किया जा सकता ("-"), अंडरस्कोर ("_"), कोलन (":"), और अवधि ("।")।

तो आप भाग्य में हैं। ":" स्पष्ट रूप से अनुमति है। और किसी को भी "%" नहीं होना चाहिए - न केवल इसलिए कि "%" अवैध रूप से वहां है, बल्कि इसलिए भी क्योंकि टुकड़ा बहुत अधिक एंकर नाम चार-चार-चर से मेल खाता है, इसलिए किसी एजेंट को किसी भी तरह से उनके साथ गुस्सा करने की कोशिश नहीं करनी चाहिए।

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

+1

@ अपरिवर्तनीय - हाँ, आप बिल्कुल सही हैं। – McDowell

40

मीडियाविकि और अन्य विकी इंजन स्पष्ट रूप से कोई बड़ी समस्या के साथ नामस्थानों को नामित करने के लिए अपने यूआरएल में कोलन का उपयोग करते हैं।

जैसे http://en.wikipedia.org/wiki/Template:Welcome

+19

सबसे प्रासंगिक उत्तर। हम सभी जानते हैं कि चश्मे में क्या है वेब विकास में वास्तविकता के साथ क्या करना है। आपको "दुनिया की शीर्ष 10 वेबसाइटों में से एक" की तुलना में "सुरक्षा" की एक बेहतर गारंटी प्राप्त नहीं होगी। –

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