HTML跳转链接加载失败,报ERR_HTTP2_PROTOCOL_ERROR求助
HTTP/2协议层面的请求头差异问题
从页面跳转访问时,浏览器会自动带上Referer请求头,而直接在地址栏输入访问时这个头部是空的。很多服务器的HTTP/2配置对带Referer的请求存在协议处理bug,比如头部字段解析异常、HTTP/2堆栈对特定请求头组合不兼容。你可以用浏览器开发者工具的Network面板,对比两种访问方式的请求头和服务器响应细节,重点看HTTP/2帧的状态码和错误信息。缓存与预加载机制冲突
页面跳转时可能触发了浏览器的资源预加载,导致请求的资源状态异常。试试在开发者工具里勾选Disable cache禁用缓存后再测试,或者检查目标站点的Link预加载响应头是否配置错误,比如预加载的资源路径无效,进而引发HTTP/2协议错误。服务器安全策略拦截
部分服务器的WAF或者安全模块会拦截带有特定来源的请求,误判为非法请求后在HTTP/2协议层面拒绝响应。你可以临时关闭服务器的安全策略做测试,或者查看服务器日志里对应请求的错误记录,看看有没有相关拦截的日志条目。HTTP/2会话复用bug
浏览器跳转时会复用已有的HTTP/2会话,而地址栏直接访问会新建会话。如果服务器的HTTP/2会话管理存在bug,复用会话时就会出现协议错误。可以试试关闭所有相关标签页后重启浏览器,或者在Chrome的chrome://net-internals/#http2页面重置HTTP/2连接,之后再测试跳转是否正常。请求头大小超限
跳转时的请求头(比如Referer、Cookie)总大小可能超过了服务器HTTP/2配置的最大帧大小,导致服务器无法处理请求。对比两种访问方式的请求头总大小,看看是不是有过大的Cookie或者自定义头部,尝试清除Cookie后再测试跳转。
内容的提问来源于stack exchange,提问作者bia

