2011-07-16 26 views
35

使用http基本身份驗證時,可以在URL中傳遞用戶名,例如,轉義基本身份驗證URL中的用戶名字符

http://[email protected]/path/ 

但是現在假設用戶名是電子郵件地址,例如, [email protected]。這樣做顯然是不明確的:

http://[email protected]@foo.com/path/ 

有沒有辦法在用戶名中轉義@字符?我試過標準的URL編碼:

http://david%[email protected]/path/ 

但是沒有這樣做。

+0

您不能在URL中使用@。還是我誤解了你? – Hnatt

+0

我知道我對派對有點遲到,但是你是否錯過密碼部分?標準語法應該是'http(s):// user:pass @ host'。所以在你的情況下,它應該是'http(s)://david%40company.com:Y0ur%24up3r%243cur3P%40%24%24w0rd @ foo.com'。 – FatalMerlin

+0

@FatalMerlin你可以同時使用用戶名和密碼。儘管這是我認爲與逃避問題正交的。 –

回答

52

RFC 3986,第3.2.1節,它需要百分之編碼:

userinfo = *(unreserved/pct-encoded/sub-delims/":") 

所以看起來

http://david%[email protected]/path/ 

是正確的。你在哪裏讀它?也許你需要手動解碼值?

+0

我有我自己的處理憑據的服務器端代碼。我需要調試它,並確切地看到我以這種方式逃脫時收到的內容。我會跟進! –

+2

客戶端似乎不適合使用該語法。例如即使發送任何請求,IE9也會阻止它,並且出現錯誤「Windows無法找到'http://david%[email protected]/path/'。檢查拼寫並重試。」這使我相信這個語法實際上並不支持,儘管從RFC中可以看到它。 –

+0

工作正常使用捲曲... –