Go版本
go版本:go1.21.1 darwin/amd64
在你的模块/工作区中go env
的输出:
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/nmaharja/Library/Caches/go-build'
GOENV='/Users/nmaharja/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS='-buildvcs=false'
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/nmaharja/go/pkg/mod'
GONOPROXY='github.office.opendns.com'
GONOSUMDB='github.office.opendns.com'
GOOS='darwin'
GOPATH='/Users/nmaharja/go'
GOPRIVATE='github.office.opendns.com'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.1'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/nmaharja/projects/clean/ProxyConnectTools/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/fv/c8jghnc95_vgn57t5w9hvvlh0000gn/T/go-build1530722529=/tmp/go-build -gno-record-gcc-switches -fno-common'
你做了什么?
我尝试通过HTTP2协议创建一个UDP连接。对于HTTP2连接,RFC建议使用CONNECT
方法并设置以下头信息
HEADERS
:method = CONNECT
:protocol = connect-udp
:scheme = https
:path = /.well-known/masque/udp/192.0.2.6/443/
:authority = example.org
我没有看到设置protocol
、scheme
和path
头信息。当不使用encodeHeaders
方法时,scheme
和path
方法只设置了CONNECT
。
RFC文档链接: https://datatracker.ietf.org/doc/rfc9298/
你看到了什么发生?
服务器决定使用TCP协议而不是UDP。
你期望看到什么?
我期望看到UDP连接。
5条答案
按热度按时间gupuwyp21#
更新,事实证明,如果我使用除了"CONNECT"之外的其他方法,我可以通过仅包含头部信息的UDP连接。
但这可能只适用于我的特定情况。因为RFC期望在CONNECT方法上使用UDP连接。
nzrxty8p2#
CC @neild
aiazj4mn3#
对不起,我不太明白这里的具体要求是什么。你是要实现RFC 9298,还是希望net/http的某个部分直接支持它?
在HTTP/2中使用net/http实现RFC 9298的一个障碍是,我们目前缺乏对Extended CONNECT(RFC 8441)的支持。有一个已接受的提案来添加Extended CONNECT支持(#53208),但尚未实施。
ao218c7q4#
相似问题
(如果这个有帮助或无帮助,请给表情投票;欢迎在 this discussion 中提供更详细的反馈。)
cnjp1d6j5#
对不起,我不太明白这里的具体要求是什么。你是要实现RFC 9298,还是希望net/http的某个部分直接支持它?
在HTTP/2中使用net/http实现RFC 9298的一个障碍是,我们目前缺乏对Extended CONNECT(RFC 8441)的支持。有一个被接受的提案来添加Extended CONNECT支持(#53208),但尚未实现。
是的,我原本以为这里会支持RFC 9298。我理解不同的HTTP2 UDP隧道实现似乎遵循不同的标准。就我的用例而言,我使用了"CONNECT-UDP",这添加了所需的两个头部":"scheme"和":path",代理服务器暂时决定使用UDP隧道。RFC 9298期望我使用"CONNECT",这是我的困惑所在。