>백엔드 개발 >C++ >HTTP GET 요청의 URL 인코딩 슬래시로 인해 이중 슬래시가 발생하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?

HTTP GET 요청의 URL 인코딩 슬래시로 인해 이중 슬래시가 발생하는 이유는 무엇이며 이 문제를 어떻게 해결할 수 있습니까?

DDD
DDD원래의
2024-12-31 15:51:09609검색

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으로 문의하세요.