Published on
1515

一次奇怪的CDN报错ERR_HTTP2_PROTOCOL_ERROR

Authors
  • avatar
    Name
    小辉辉
    Twitter

前言

除了这个博客外,另外还有一个博客一直在更新,考虑到那个博客有很大一部分内容是图片,网站给的提供带宽又比较小,最后就想到了上个腾讯云CDN吧,看了下收费,100GB包12个月的套餐只要20块钱,反正现在博客的访问流量又不是很多,一年用100个G应该绰绰有余了。

经过一番倒腾配置后,终于给用上CDN了,正当我准备好好享受自己的劳动成果时,突然发现在访问自己的一篇文章时,遇到了一个奇怪的现象,好多图片都加载失败无法显示了,一看控制台,发现好多net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) 的报错,我看着报错是和http2协议错误有关,可这后面跟着的200又让我疑惑了,200不是说明状态正常嘛。

想想这个协议错误,第一反应是不是因为CDN回源过程中因为带宽限制中断了?于是我又重新刷新了下页面,也尝试着去访问了另外几篇文章,发现这规律就甚是奇怪,怎么说呢?就是不好复现,非常随机。想想反正目前博客的访问人数不多,先这样将就着吧,问题也不大。

处理过程

直到昨天下班,突然又想起来了这个事,为什么呢?因为腾讯云给我发了个账单,提示我有2毛钱的扣款,当时也想不起来有啥费用,上去一看才知道原来之前包的CDN资源包到期了,自动切换到了预付费的模式,5月份的流量产生了上面的费用。

我一上来还是先看看之前的问题是不是好了,谁知访问第一篇文章又出现了上面的问题,想想得试试解决这个问题了,于是网上一顿搜索,看了看他们的遇到的情况感觉都和我的不符合,直到有一篇文章也讲到了他用腾讯云CDN出现了和我一样的报错,最后他通过提交工单给解决了,原因是因为他的源站返回了多余的头信息,我检查过后明显不是。

那我想了想何不也提交个工单呢?

于是发起了一个工单,前面两个来回给的处理结果都是无法复现,这我就有点苦恼了,后面不得已又详细讲了下复现步骤,还上传了一个视频,最后终于接到了腾讯云CDN技术打过来的电话,他们说终于能复现我的问题了,给的原因是CDN在批量回源请求的过程中有超时处理机制,因为我主机的带宽比较小,所以很容易触发这个机制,给我的解决方案是主动小批量预更新操作。

他的回复和我的猜测还有点重合,之后我也是想着去复现下这个问题,我是怎么做的呢?在网站目录下上传了一个很大的js文件(15MB),在浏览器去访问这个地址,如果真的有超时报错的机制,那这个访问应该必然会报net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK)错误的,但是最后的结果确没有报错,硬是等待这个文件下载完成在浏览器上显示了出来。

哎,先不管了,为这个事情已经投入太多时间了,先把这个事情给记这了,等后面有机会再看吧。

最后附加上工单的处理记录。

我:CDN在同时请求多张图片资源时会有net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) 报错

腾讯云工程师:您好,非常抱歉让您久等了,关于您的问题,我们这边通过无痕模式访问是正常的,您可以提供下访问异常的资源信息,我们帮您进一步核实处理,感谢您的理解与支持

我:不好意思,这个问题的确是偶现,我这边大致总结出来的规律是访问未缓存过的资源时(CDN miss)状态,又是批量请求图片资源很容易复现,我这边又往前面打开了一篇文章 xxxx,又有很多报错,如果上面的地址复现不了,可以在文章底部导航往前再刷几篇文章试试,麻烦了

腾讯云工程师:您好,非常抱歉让您久等了,关于您的问题,帮您测试了好几个对应文件没有复现您的问题,您当前资源是您源站下的,您可以预热下对应资源,感谢您的理解与支持。相关地址:https://cloud.tencent.com/document/product/228/40273

我:真的很抱歉,昨天大晚上还在协助排查问题,很是感谢 这个问题可能我上面也没有说的很清楚 具体现象是这样的,我每一篇文章会有几张图片需要加载,我每次在加载图片过程中,就会偶现这个问题,具体表现是这样的:

  1. 一篇文章下的大部分图片能正常加载,没有报错 2.偶发几张图片加载错误,提示 net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) 3.如果单独再刷新下这篇文章,又有可能会恢复正常加载 4.单独访问上述报错的图片地址,也是能正常加载 5.感觉就是好几张图片同时加载的时候会出现上述的错误

特意录制了一个视频帮助排查,最后这个问题真的是比较难复现,如果你那边真是这样的话,那也只能这样了。

腾讯云工程师:刚才和您电话沟通(接到了电话回复了上面的问题和处理方案),已为您详细解答节点回源超时问题。