前几天老大突然和我说之前的导出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错误相关推荐

  1. 谷歌浏览器linux 64怎么安装插件,Ubuntu 16.04下安装64位谷歌Chrome浏览器

    1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或 ...

  2. 如何解决谷歌Chrome浏览器空白页的问题

    如何解决谷歌Chrome浏览器空白页的问题 谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome:/ ...

  3. 谷歌chrome浏览器源码分析

    谷歌chrome浏览器源码分析 2016-01-21 15:24 55人阅读 评论(0) 收藏 举报  分类: C++(52)  转自CSDN 前言: 1.之所以整理此文,有俩个目的:一是为了供自己学 ...

  4. Ubuntu 17.04下安装64位谷歌Chrome浏览器

    1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或 ...

  5. [86]ubuntu16.04下安装64位谷歌Chrome浏览器

    1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 也可以按下 Win 键(或叫 Super 键),在 Dash 的搜索框中输入 terminal 或 ...

  6. Ubuntu 16.04下安装64位谷歌Chrome浏览器

    1.将下载源加入到系统的源列表 在终端中,输入以下命令: sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/s ...

  7. 谷歌 chrome 浏览器开发者工具打不开的解决方法

    谷歌 chrome 浏览器开发者工具打不开的解决方法 参考文章: (1)谷歌 chrome 浏览器开发者工具打不开的解决方法 (2)https://www.cnblogs.com/youding/p/ ...

  8. 谷歌浏览器书签栏怎么隐藏 谷歌Chrome浏览器书签栏隐藏教程

    打开谷歌Chrome浏览器,进入设置页面; 谷歌浏览器书签栏怎么隐藏?谷歌Chrome浏览器书签栏隐藏教程 谷歌浏览器书签栏怎么隐藏?谷歌Chrome浏览器书签栏隐藏教程 待设置页面弹出后,滑动找寻& ...

  9. 谷歌Chrome浏览器欲推门户网站聚合 正测试新“探索”页面

    谷歌chrome浏览器欲推门户网站聚合 正测试新"探索"页面 对于国内的浏览器来说,应用界面中集成门户网站聚合的做法非常常见.最近有消息显示,谷歌Chrome浏览器也可能要效仿这一 ...

最新文章

  1. java openfile busy_android java.io.IOException: open failed: EBUSY (Device or resource busy)
  2. linux命令free
  3. 核心交换机相对于普通交换机的优势
  4. 【转】03.Dicom 学习笔记-DICOM C-Get 消息服务
  5. Android中使用软引用和弱引用避免OOM的方法
  6. python对象的三个属性_Python 对象属性的访问
  7. .net trim 替换指定字符_CAD二次开发实例:批量文本查找替换
  8. SpringBoot系列: Eclipse+Maven环境准备
  9. Linux下VNCSERVER的使用介绍
  10. 当前目录未找到系统,请尝试选择更深层的目录再次搜索解决方法
  11. 深夜,基友给我发了个某短视频app,我没忍住把它给...
  12. mysql 百度地图 省市_批量获取百度地图的行政区划电子围栏
  13. 2016年最新J2EE基础入门教程目录(完结版)
  14. 继承QPushButton重写MouseEvent后按钮clicked信号不响应
  15. [转]SAP模块一句话入门
  16. 转:人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水...
  17. 初探强化学习(11)Dyna类型的强化学习
  18. python opencv 利用HSV,YUV(YCbCr)实现皮肤检测与抠图,与磨皮美颜
  19. 妇女节手抄报Word电子小报
  20. 使用Highcharts来画一个简易的甘特图

热门文章

  1. QQ空间小秘书 V1.13 beta3~~ 天空原创软件
  2. 连锁企业如何迈出网络运维数字化升级第一步?
  3. 在n个硬币中找出假币
  4. select二级联动价格策略+js的eval()
  5. 手把手带你YOLOv5 (v6.1)添加注意力机制(二)(在C3模块中加入注意力机制)
  6. CentOS 7 下安装 Nginx
  7. 中国厉害的黑客组织?别说只知道红客联盟,知道“他们”才厉害
  8. 前天在腾讯soso问问上别人问我raid问题?
  9. Datawhale 7月学习——李弘毅深度学习:卷积神经网络
  10. Eureqa Formulize从实验数据中自动筛选函数关系的symbolic regression符号回归软件