关于华为CDN开启HTTP2.0会导致多次请求访问源站的问题

oy2022-04-18测评体验1941

经过跟华为工程师确认,目前华为CDN存在开启HTTP2.0协议访问,在苹果手机下,会出现同时多次请求源站的情况导致部分业务场景失效。没错,就只是在苹果手机上复现此问题,安卓手机、浏览器正常。正因为如此笔者在半夜切换域名解析CDN厂商的时候未能做充分测试,导致了一大早用户侧出现大规模异常引发投诉 苹果手机从iphone6测试到iphone13均存在此问题!百度了好久也未找到原因,特记录在此,避免程序员同行们入坑


微信截图_20220418211700.png


总所周知,在开发微信页面,跳转到微信请求用户头像昵称授权的时候,跳转返回的URL会携带一个code,再用这个code去换取用户信息,而这个code是使用一次即失效的。


而华为云CDN在苹果手机下,会同一时间多次请求源站,导致后续请求的code是失效状态,出现程序异常。假设code可用时返回302代码跳转,失效时直接报500,那么在源站日志上会看到同一时间有多条请求,第一个302,然后都是500

17f7501add2622a3ddefe9.png


之前走了许多弯路,包括对苹果手机抓包怀疑是苹果手机多次请求造成的,但是经过分析发现,发现也只是有一次请求,但是华为CDN侧却反馈苹果手机向CDN节点发出了多次请求?偶然间关闭了HTTP2.0就是正确的一次请求了,真实匪夷所思。解决办法:


1、在华为云CDN关闭HTTP2.0的功能,立即正常。经过测试,其他厂商阿里云腾讯云的HTTP2.0并不存在此问题


2、如果非要使用HTTP2.0,那么在程序中需要做防code重复兼容处理:

如果是一个新code,则存入redis缓存5s,同时进行下一步逻辑处理(换取用户头像昵称信息)并一同存入redis;

在短时间内发现同样的code的请求,如有上一步已获取到昵称头像,则直接返回redis缓存结果,如没有则进行5s监听等待再返回。不再请求微信服务器,去请求一定是返回code过期的错误码


还是希望华为CDN尽快改进吧,不仅是在技术上,也更希望丰富完善更多功能,比如暂时还不支持ipv6,不支持自定义的500错误页、无QPS频次控制等功能的缺失,仅能作为一个基础缓存静态文件的CDN使用还是太过于基础了

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。