編碼URL:在HTTP GET 中保留文字斜線
在HTTP GET 請求中,URL 編碼對於傳輸特殊字元至關重要。不屬於標準字符集。但是,當 URL 路徑包含斜線 (/) 時,某些 GET 實作會自動將其轉換為雙斜線 (//) 語法。在傳輸 URL 編碼的斜杠字元時,這可能會出現問題,因為它們對於遵守 HTTP/GET 上的 OCSP 等協議至關重要。
以下程式碼片段說明了該問題:
using (WebClient webClient = new WebClient()) { webClient.DownloadData("http://example.com/%2F"); }
然而,發送到伺服器的實際請求是:
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
要保留HTTP GET 中的文字斜槓,需要自訂解決方案。以下是修改 Uri 物件以保留路徑和查詢的程式碼片段:
Uri uri = new Uri("http://example.com/%2F"); ForceCanonicalPathAndQuery(uri); using (WebClient webClient = new WebClient()) { webClient.DownloadData(uri); } void ForceCanonicalPathAndQuery(Uri uri){ string paq = uri.PathAndQuery; // need to access PathAndQuery FieldInfo flagsFieldInfo = typeof(Uri).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic); ulong flags = (ulong) flagsFieldInfo.GetValue(uri); flags &= ~((ulong) 0x30); // Flags.PathNotCanonical|Flags.QueryNotCanonical flagsFieldInfo.SetValue(uri, flags); }
透過修改 Uri 對象,路徑被迫保持其原始狀態,確保文字斜線保留在GET 請求。該解決方案允許合規地實現需要 URL 編碼斜線的協定。
以上是如何在 URL 編碼的 HTTP GET 請求中保留文字斜線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!