>백엔드 개발 >C++ >URL 인코딩이 GET 요청에서 백분율 인코딩 슬래시를 수정하는 것을 방지하려면 어떻게 해야 합니까?

URL 인코딩이 GET 요청에서 백분율 인코딩 슬래시를 수정하는 것을 방지하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-05 03:38:43681검색

How Can I Prevent URL Encoding from Modifying a Percent-Encoded Slash in a GET Request?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.