问题现象描述
浏览器
https
请求应用连接后报:ERR_HTTP2_PROTOCOL_ERROR
- IE11浏览器正常
Chrome内核浏览器全部报以上错误
应用整个请求链路
浏览器
->防火墙
->F5
->kong网关
->F5
->nginx
->nginx
乱查一通
开发者工具看不到
状态码
,是一个ERROR。
由于新迁移了应用到接入出现该问题,找运维、网络、安全组同一起看调整了应用前面的各种配置仍然不好使。
认真重新排查
- 查看应用日志,有请求到后台并且处理也是成功的,响应也没有问题
1.1 表明不是浏览器端发送时出现的问题
1.2 表明不是浏览器端的请求被防火墙过滤了,和防火墙没有关系- nginx上面有正常的请求日志,并且明确展示了状态码是200(通过nginx更证明了应用是正常返回了请求)
- 报了HTTP2相关的错误去查找相关的信息,里面有一条规则引起了注意
HTTP2严格要求Header要按Http标准设置
- 排查代码发现有如下代码(Expires后面多一个空格)
response.addHeader("Expires ",String.valueOf(System.currentTimeMillis()));
解决办法
使用准备的Header-删除代码中多余的空格,搞定!!!
response.addHeader("Expires",String.valueOf(System.currentTimeMillis()));