GET 요청 중 슬래시 URL 인코딩 딜레마 극복
퍼센트 인코딩이 포함된 URL에 HTTP GET 요청을 보내려는 시도 슬래시(/)(예: "http://example.com//")를 사용하는 경우 일반적인 접근 방식은 WebClient 클래스를 다음과 같이 활용하는 것입니다.
using (WebClient webClient = new WebClient()) { webClient.DownloadData("http://example.com/%2F"); }
그러나 이 방법은 예상치 못한 결과를 낳는다. 전송 중에 슬래시 문자가 추가 슬래시로 변환되어 다음 요청이 전송됩니다.
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
이 문제는 HTTP/GET을 통해 OCSP를 사용할 때 발생하며 '/ 대신 실제 /를 전송해야 합니다. ' 프로토콜 준수를 보장합니다.
잠재적인 솔루션
이상적이지는 않지만, 다음 코드 조각은 문제에 대한 해결 방법을 제공합니다.
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 개체의 내부 플래그를 수정하여 CanonicalPathAndQuery를 강제 적용하여 전송 중에 슬래시 문자가 유지되도록 보장하는 작업이 포함됩니다.
면책조항
이 접근 방식은 프레임워크의 향후 버전과의 호환성이 보장됩니다. 내부 클래스 동작을 수정할 때는 항상 주의해서 진행하세요.
위 내용은 URL 인코딩이 GET 요청에서 백분율 인코딩 슬래시를 수정하는 것을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!