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 중국어 웹사이트의 기타 관련 기사를 참조하세요!