揭開HTTP GET 中URL 編碼斜杠的神秘面紗
在透過HTTP GET 檢索資料的過程中,開發人員經常遇到以下挑戰發送URL 編碼的斜線(/)。然而,當嘗試傳輸此特定字元時,會出現一個常見的誤解。
如範例程式碼所示,僅在 URL 字串中包含 / 是不夠的。相反,編碼的斜杠被錯誤地解釋為兩個斜杠,導致請求發送為:
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
此行為違反了OCSP 協議,該協議要求傳輸實際的/ 字符而不是“/” 。
繞道非傳統
要解決此問題,有一個解決方法已經出現了利用 Uri 物件的直接修改。透過強制覆蓋 PathAndQuery 標誌,我們欺騙框架識別我們想要的 URL 編碼。
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); }
雖然此方法遠非理想,但它使開發人員能夠發送帶有 URL 編碼斜杠的 HTTP GET 請求,滿足OCSP 等特定協議的要求。
以上是為什麼 HTTP GET 請求中的 URL 編碼斜杠會導致雙斜杠,如何解決此問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!