golang에서 gRPC 클라이언트의 http 호스트 헤더를 재정의하는 것은 일반적인 요구 사항입니다. gRPC는 고성능, 언어 간 원격 프로시저 호출 프레임워크입니다. gRPC를 사용하여 통신할 때 http 요청의 호스트 헤더를 사용자 지정해야 하는 경우가 있습니다. PHP 편집자 Xigua는 비즈니스 요구 사항을 더 잘 충족하기 위해 golang에서 이 기능을 구현하는 방법을 소개합니다.
gRPC 클라이언트를 통해 연결을 통해 요청을 보냈습니다
으아악서버 측에서는 http.request에 host
是确切的hostname:port
가 표시됩니다. 그러면 내 nginx 서버는 다음과 같이 설정됩니다
이것은 일반적인 웹 호스팅 기술입니다.
grpc.Dial(xxx:port)
에서 어떤 호스트 이름을 사용하든 상관없이 잘 작동합니다. 그런데
grpc 컨텍스트에서(http2 요청의 헤더에 채워집니다). 이 요청은 nginx에 의해 차단되며 나는
을 받습니다. 으아악호스트 이름을 수동으로 입력해야 하는 이유는 grpc.Dial
中的主机名是固定的。而且我不能使用不同的位置来做反向代理,因为port
다음에 Restful API의 라우팅 경로가 오기 때문입니다.
호스트네임도 고정되어 있고 경로도 고정되어 있다면 역프록시를 할 수 있는 다른 방법은 없나요?
(23/09) 업데이트: http2의 호스트 헤더가 :Authority
의사 헤더로 대체된 것으로 나타났습니다. :Authority
伪头取代了。
gRPC 使用 HTTP/2,不使用 :host
标头,而是使用 :authority
해결 방법
:host
헤더가 아닌 :authority
의사 헤더를 사용합니다. 이 헤더의 값은 여기에서 결정됩니다: https://github .com/grpc/grpc-go/blob/aa6ce35c792863305e0f42acc27f2c7153275f89/clientconn.go#L1942
:authority
标头的值是用户拨号目标的端点部分,其格式为 url://authority/endpoint
TL;박사
기본적으로 authority
。请参阅:https://pkg.go.dev/google.golang.org/ grpc#WithAuthority。但还要注意,此拨号选项会覆盖 TLS 握手期间使用的 ServerName
에 사용됩니다.
gRPC-Go는 이 권한
을 무시할 수 있는 전화 접속 옵션도 지원합니다. https://pkg.go.dev/google.golang.org/grpc#WithAuthority
ServerName
값을 재정의합니다. 🎜
🎜더 많은 질문/우려 사항이 있는 경우 GitHub 저장소를 통해 언제든지 문의해 주세요. 귀하의 질문에 대한 응답 시간이 더 빨라질 것입니다. 🎜위 내용은 golang에서 gRPC 클라이언트의 http 호스트 헤더 재정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!