Dot-Htaccess
如何在 URL 參數中的 HTTP 基本身份驗證密碼中傳遞問號 (?)?
我正在自動化一個需要 HTTP 基本身份驗證的網站。
在大多數情況下,此連結中給出的建議就像一個魅力:
您可以在 URL 參數中傳遞使用者/密碼以進行 HTTP 基本身份驗證嗎?
但是,有些使用者的密碼中有問號 (
?
)。請告知如何轉義問號。PS我知道
@
在使用者名中可以轉義為%40
.
我假設您必須引用傳遞使用者憑據的 URL 的userinfo部分,而不是“URL 參數”(它是query-string的一部分):
https://<userinfo>@example.com/foo?<query-string>
對於 URL 的任何部分中不允許出現的任何字元(因為它可能具有特殊含義),它必須是 URL 編碼 ( percent-encoded )
%
後跟該字元的兩位十六進制程式碼。所以,
@
是%40
和?
是%3F
。但這些並不是唯一可能需要 URL 編碼的兩個字元。您應該通過腳本中的 URL 編碼函式傳遞值,以正確地對 URL 的該部分進行 URL 編碼。
RFC 3986定義了 URL 的userinfo部分中允許(未編碼)的字元:
userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
因此,其他所有內容都必須進行百分比編碼,包括
:
和%
- 如果它們是使用者或密碼部分的一部分(為了否定那裡的特殊含義)。在同一份文件中也有說明:
不推薦在 userinfo 欄位中使用“user:password”格式。
因此,瀏覽器支持不完整,版本不斷更新(安全性是主要問題)。我相信最新版本的 Chrome(經過測試的 v79)和 Firefox 確實支持 URL 中的使用者憑據。我已經看到評論說這也適用於最新的 Safari(?),雖然這已經很久沒有工作了,而且它目前對我不起作用(雖然我沒有在 iOS 12.4.1 上執行最新的)。幾年前,IE 放棄了對 URL 中使用者名和密碼的支持,而且看起來它不會回來了。