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