2010-10-04 16 views
19

मैं एक संसाधन है कि एक . मेरी URL ऐसा दिखाई देगा इसका मतलब है यह: http://myapp/index/ . और मुझे क्वेरी पैरामीटर जोड़ने के लिए इतना है कि यह इस तरह दिखता है की जरूरत है: http://myapp/index/.?type=xml मैं अपने संसाधनों की प्रस्तुति के लिए Freemarker का उपयोग करें और इस मामले के लिए एक प्रतिशत-एन्कोडिंग हैक किए गए:एक url संसाधन में एक बिंदु (% 2 ई) है कि

<#if key?matches("\\.")> 
<li><a href="${contextPath}/index/%2E">${key}</a></li> 
</#if> 

यह Firefox के लिए ठीक काम करता है। लेकिन आईई, सफारी, क्रोम, ओपेरा जैसे अन्य सभी ब्राउज़र्स बस मेरे यूआरएल एन्कोडेड डॉट (http://myapp/index/%2E) को अनदेखा करते हैं।

कोई सुझाव?

उत्तर

14

यह वास्तव में नहीं वास्तव में स्पष्ट रूप से मानक (RFC 3986) क्या . या .. का एक प्रतिशत-एन्कोड संस्करण में कहा गया है नहीं छोड़ा जाएगा संस्करण के समान इस-फ़ोल्डर/ऊपर एक फ़ोल्डर अर्थ माना जाता है। धारा 3.3 केवल "पथ सेगमेंट . और .." के बारे में बात करता है, यह स्पष्ट किए बिना कि वे . और .. से पहले पीटीसी-एन्कोडिंग से मेल खाते हैं या नहीं।

व्यक्तिगत रूप से मुझे फ़ायरफ़ॉक्स की व्याख्या मिलती है कि %2E का मतलब . सबसे व्यावहारिक नहीं है, लेकिन दुर्भाग्य से अन्य सभी ब्राउज़र असहमत हैं। इसका मतलब यह होगा कि आपके पास पथ पथ नहीं हो सकता है जिसमें केवल . या .. है।

मुझे लगता है कि केवल एक ही संभावित सुझाव है "ऐसा मत करो"! अन्य पथ घटक भी परेशान हैं, आमतौर पर सर्वर सीमाओं के कारण: %2F, %00 और %5C पथों में अनुक्रम कुछ वेब सर्वरों द्वारा अवरुद्ध भी हो सकते हैं, और खाली पथ खंड भी समस्याएं पैदा कर सकता है। तो सामान्य रूप से पथ पथ में सभी संभावित बाइट अनुक्रमों को फिट करना संभव नहीं है।

+0

मुझे लगता है कि मुझे लगता है कि न करे तो, THX है। – cuh

+1

मुझे पता चला है कि भले ही% 2e यूआरएल का हिस्सा है, उदा। 'http: // localhost/अनुक्रमणिका% 2ehtml', फ़ायरफ़ॉक्स (14) और क्रोम इसे '.' में परिवर्तित कर देता है। यह खंड 2.3 में निर्दिष्ट है। बाद में धारा 3.3 में, यह कहता है कि '.' और' ..' पथनाम के भीतर सापेक्ष संदर्भ के लिए हैं। तो, 'http: // localhost /% 2e' का अर्थ अनिवार्य रूप से' http: // localhost/'होगा। – slowpoison

+1

अच्छा बिंदु, @ स्लोपॉइसन - "यूआरआई जो एक अनारक्षित चरित्र के प्रतिस्थापन में भिन्न है, इसके इसी प्रतिशत-एन्कोडेड यूएस-एएससीआईआई ऑक्टेट समकक्ष", और "।" एक अनारक्षित चरित्र है। ठीक है। – phyzome

5

यह संभव नहीं है। §2.3 कहता है कि "।" एक अनारक्षित चरित्र है और "यूआरआई जो एक अनारक्षित चरित्र के प्रतिस्थापन में भिन्न है, उसके संबंधित प्रतिशत-एन्कोडेड यूएस-एएससीआईआई ऑक्टेट समतुल्य हैं"। इसलिए, /%2E%2E//../ जैसा ही है, और यह सामान्यीकृत हो जाएगा।

(यह bobince द्वारा एक जवाब और slowpoison द्वारा एक टिप्पणी का एक संयोजन है।)

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