为了OSS 更好的访问体验,OSS计划升级支持HTTP/2。目前发现低版本Go语言应用存在缺陷导致HTTP/2请求处理异常,已知影响面如下(如果您访问OSS的方式,是使用OSS官方SDK,则无需关心以下内容):
- 使用Go语言应用使用HTTPS 访问OSS服务并且客户端开启支持HTTP/2 的,建议将Go版本升级至Go1.8 及以上版本。
(如果使用了AliyunOSS 官方提供的Go 语言SDK 则无需关心此问题) - 使用Docker Registry(部署为Registry或Mirror)并使用OSS作为镜像存储的用户(https://hub.docker.com/_/registry/),
建议将Registry版本升级至2.6.0 及以上版本,升级步骤为: "用新镜像启动容器"。
缺陷原因:HTTP/2 的 :path pseudo header RFC 协议规定是不支持absoluteURI 的,低版本Go语言应用存在缺陷,可能会发送:path 字段为absoluteURI 的请求,因此会造成H2 请求发生stream error: protocol error 错误,导致请求失败。
缺陷详情:详见 https://github.com/golang/go/issues/16847
修复情况:目前go 语言及使用go 语言的Docker Registry已经在新版本Fix 了这个问题
Go:
Fix: https://github.com/c3mb0/net/commit/98a0f4b48863877e4e357441e80ab56d7269a206
目前在 release-branch.go1.8 已经包含这个修复。
Docker Registry:
在2.6.0之前版本存在问题,在2.6.0及后续版本修复了这个问题。
修复版本:Go1.8 及后续版本,Docker Registry 2.6.0 及后续版本。