首頁 >後端開發 >C++ >為什麼 HTTP GET 請求中的 URL 編碼斜杠會導致雙斜杠,如何解決此問題?

為什麼 HTTP GET 請求中的 URL 編碼斜杠會導致雙斜杠,如何解決此問題?

DDD
DDD原創
2024-12-31 15:51:09632瀏覽

Why Does URL-Encoding Slashes in HTTP GET Requests Result in Double Slashes, and How Can This Be Fixed?

揭開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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn