>백엔드 개발 >Golang >역방향 프록시 처리를 위해 HTTP 요청 본문을 검사하고 보존하려면 어떻게 해야 합니까?

역방향 프록시 처리를 위해 HTTP 요청 본문을 검사하고 보존하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 22:57:15786검색

How Can I Inspect and Preserve an HTTP Request Body for Reverse Proxy Handling?

역방향 프록시 처리를 위한 요청 본문 보존

일부 시나리오에서는 사용자 정의 http.Handler에서 HTTP 요청을 검사하는 동안 필요할 수 있습니다. 요청 본문을 검사할 뿐만 아니라 역방향 프록시 처리기로 전달하는 등의 추가 처리를 위해 원래 요청을 보존합니다. 이를 달성하려면 다음 접근 방식을 고려하십시오.

검사 중에 요청 본문이 비워지고 역방향 프록시와 같은 후속 소비자에게 아무 것도 남지 않을 때 문제가 발생합니다. 이 문제를 해결하려면 요청 본문을 버퍼로 읽어온 다음 이 버퍼가 지원하는 두 개의 새로운 판독기를 생성할 수 있습니다.

  1. 버퍼 생성: io.ReadAll( r.Body) 요청 본문을 []byte 버퍼로 읽어옵니다. 이 작업은 원래 요청 본문을 비웁니다.
  2. 두 개의 리더 생성: io.NopCloser(bytes.NewBuffer(buf))를 사용하여 동일한 리더가 지원하는 두 개의 새로운 리더(rdr1 및 rdr2)를 생성합니다. 완충기. 이 리더를 사용하면 원래 요청에 영향을 주지 않고 본문에 여러 번 액세스할 수 있습니다.
  3. 새 리더 사용: rdr1을 사용하여 검사를 수행합니다.
  4. 재설정 요청 본문: 요청 본문(r.Body)을 rdr2(io.NopCloser에 래핑됨)로 설정하여 원본으로 재설정합니다. 상태. 이를 통해 역방향 프록시는 본문이 드레이닝되지 않은 것처럼 요청을 처리할 수 있습니다.

이 접근 방식을 사용하면 요청 본문을 검사하고 필요한 작업을 수행한 다음 원본 요청을 수정되지 않은 상태로 전달할 수 있습니다. 역방향 프록시를 사용하여 오류를 방지합니다.

위 내용은 역방향 프록시 처리를 위해 HTTP 요청 본문을 검사하고 보존하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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