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

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

Linda Hamilton
풀어 주다: 2025-01-05 03:38:43
원래의
639명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿