我是靠谱客的博主 魁梧手机,最近开发中收集的这篇文章主要介绍谷歌chrome浏览器ERR_SPDY_PROTOCOL_ERROR错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前几天老大突然和我说之前的导出excel报表功能炸了,让我看看,那我就看看呗,本地环境、测试环境都ok啊,怎么同样的代码,到线上却崩了呢,搞了一下午,自己差点奔溃,但是没办法,只能接着搞。

来看看问题原因:

当你把网站迁移到性能更好的HTTP/2 协议时,可能会出现Chrome 没法加载页面的问题,取而代之是一个显示This site can’t be reached,以及错误信息为ERR_SPDY_PROTOCOL_ERROR 的页面。错误信息里面没有提到HTTP/2, 可能是因为 HTTP/2 是从SPDY 协议发展而来,所以错误信息还是老的SPDY。

原来我们新线上环境刚升级为HTTPS,所以能看到ERR_SPDY_PROTOCOL_ERROR 可能是因为服务器发送了一个无效的HTTP header。Chrome 处理二进制的HTTP/2 协议时有一些严格,不会处理以空格代替破折号的header(例如用Referrer Policy 代替Referrer-Policy),也不会处理带着2个冒号的header(例如Content-Security-Policy:: ...),所以检查下你的header 是否准确。Firefox 会忽略这些无效的header,正常显示页面。

继续找问题:

访问chrome://net-internals/#events(这链接没法点击,只能复制然后粘贴到地址栏再访问),在搜索框输入你的域名(我以example.com为例),然后在其他标签中打开出问题的网站。返回chrome://net-internals/#events ,选中Source Type 是HTTP2_SESSION 的行。

在右边,可以看到HTTP/2 协议的详细信息,重点部分类似如下:

t=50413 [st=7]  HTTP2_SESSION_RECV_INVALID_HEADER
                --> header_name = "referrer policy"
                --> header_value = "same-origin"
t=50413 [st=7]  HTTP2_SESSION_SEND_RST_STREAM
               --> description = "Could not parse Spdy Control Frame Header."
               --> error_code = "1 (PROTOCOL_ERROR)"
               --> stream_id = 3

看到HTTP2_SESSION_RECV_INVALID_HEADER 那行了吗?无效的header 就在它下面,在这个问题中,无效的header 是referrer policy,用空格代替了破折号。HTTP/2 协议理的header 名称必须全小写,如果你发送一个Referrer-Policy的header,浏览器会视为referrer-policy

我所遇到的就是header里多了个%20,也就是空格,这么个空格在平时不会被解析,只有在chrome浏览器HTTPS协议下才会被如此严谨。。真是让老夫头疼啊。不过总算是解决了。

 

在你浏览器的chrome://net-internals/中,你能发现很多有趣的东西。这里有一些不会出现在开发者工具中的请求,例如浏览器扩展发出的请求。

 

转自:https://www.michalspacek.com/chrome-err_spdy_protocol_error-and-an-invalid-http-header

最后

以上就是魁梧手机为你收集整理的谷歌chrome浏览器ERR_SPDY_PROTOCOL_ERROR错误的全部内容,希望文章能够帮你解决谷歌chrome浏览器ERR_SPDY_PROTOCOL_ERROR错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部