背景
现在很多网站都支持http2.0,在其实大部分网站没有使用到服务端主动push的功能,今天刚好遇到,在golang客户端修改 http2 header头,强制支持 enable_push=0x1
后,会导致服务端连续发了一堆请求。这样会导致客户端的接受数据无法处理push事件从而抛出错误。
工作
如何解决:
https://go-review.googlesource.com/c/net/+/85577 根据这篇文章的提交,最早就有人提出解决方案,于是便尝试接入
原golang保留了一个push解析,但是没有做完是TODO的状态,我们只需要针对这个commit进行合并就好了
func (rl *clientConnReadLoop) processPushPromise(f *MetaPushPromiseFrame) error {
return err
}
实现接口
// PushHandler consumes a pushed response.
type PushHandler interface {
// HandlePush will be called once for every PUSH_PROMISE received
// from the server. If HandlePush returns before the pushed stream
// has completed, the pushed stream will be canceled.
HandlePush(r *PushedRequest)
}
最终通过包装层,将回调事件传递后便可以解决出现的push无法解决问题,当然我们可以在服务端push的时候进行cancel不接受完整数据包,