在本博客搭建和初步运营中,经常在文章编辑器(Gutenburg)使用中报错423错误并影响正常使用,为此我展开了系统性研究和进行了工单咨询
发现问题源于腾讯云CDN的一个配置选项:回源301/302跟随
根据腾讯云故障排查文档可得知:
状态码 423 是腾讯云 CDN 自定义状态码,CDN 检测到有回环请求时会报错 423。建议您检查以下几点:
- 检查 CDN 控制台 配置的源站,若您的源站也是腾讯云 CDN 加速域名,则可能会造成回环请求。
- 若您的源站配置了 HTTP 请求到 HTTP 301/302跳转,且 CDN 控制台开启了回源跟随301/302配置,可能会造成访问423,建议您关闭回源跟随301/302配置。注意:若您使用此方法,建议您开启 HTTPS 配置,强制跳转 HTTPS,且回源方式修改为协议跟随,否则会造成多次重定向,配置流程请参考 HTTPS 配置。
问题排查
腾讯云 CDN 默认不缓存301/302状态码,当源站返回301/302请求后,CDN 节点默认会将响应返回给用户端,由用户端重定向到对应的资源进行访问。
通过开启回源跟随301/302配置,CDN 节点在回源时遭遇301/302时会主动跟随跳转,直至获取所需资源(最多可跟随3次),返回实际的资源给到用户端,用户端无需跳转。
示例
若域名www.example.com
开启了回源跟随301/302配置:
用户 A 请求资源:http://
,在节点未命中缓存,则节点会请求源站获取所需资源,若源站返回的 HTTP Response 状态码为302,跳转指向地址为 www.example.com
/1.jpghttp://
,则:www.example.com
/2.jpg
- 开启回源跟随301/302配置后,节点收到状态码为301/302的 HTTP Response 后,会直接向跳转指向的地址发起请求。
- 获取到所需资源后,缓存至节点,并返回给用户。
- 此时用户 B 也向
http://
发起请求,则会在节点直接命中并返回给用户。www.example.com
/1.jpg - 开启回源跟随301/302配置后,最多仅跟随3次跳转,超出限制则会直接返回301/302给客户。
若域名www.example.com
未开启回源跟随301/302配置:
用户 A 请求资源:http://
,在节点未命中缓存,则节点会请求源站获取所需资源,若源站返回的 HTTP Response 状态码为301/302,跳转指向地址为www.example.com
/1.jpghttp://
,则:cdn.example.com
/1.jpg
- 节点将该 HTTP Response 直接返回给用户。
- 用户向
http://cdn
发起请求,若该域名未接入 CDN,则不会有加速效果。.example.com
/1.jpg - 若此时用户 B 也向
http://
发起请求,则会重复上述流程。www.example.com
/1.jpg
了解问题所在
WordPress的一些接口在请求后会返回一个302请求,再次访问返回的新地址才能完成功能,因此其本不该缓存。而回源跟随会缓存其302信息,不论请求信息内容为何都会跳转到同一链接,因此其前后链接对应不同,由此返回错误。错误导致回环,因此腾讯云报错423
例1
请求http://www.example.com/api.php?uploadid=1
会将你访问的uploadid计入数据库并返回302请求至http://www.example.com/upload.php?id=1
,当你访问此链接时才会正常进行上传
而回源跟随会直接对你返回http://www.example.com/upload.php?id=1
,前后参数/Cookie不同,服务端报错,因此产生回环
例2
请求http://www.example.com/api.php?uploadid=1
会将你访问的uploadid计入数据库并返回302请求至http://www.example.com/upload.php?id=1
,当你访问此链接时才会正常进行上传
当你再次访问http://www.example.com/api.php?uploadid=2
,服务端本会返回http://www.example.com/upload.php?id=2
,但CDN缓存了上次的302结果并对你返回了http://www.example.com/upload.php?id=1
,此时前后访问id不同导致出错
根据腾讯云故障优先级
CDN 默认策略:当用户源站出现异常时,用户侧访问到达的 CDN 节点若缓存仍未到期,则根据节点缓存直接响应内容给客户。若到达的 CDN 节点缓存已被淘汰,则会发起回源请求,无法进行响应。
CDN会返回一个错误请求,而此请求无法将文件上传至服务器,因此会引发接下来的连续错误
根进
根据官方页面描述推测,如果开启这两项设置会降低回源次数,使得用户访问时都从距离自己最近的CDN节点抓取数据,就相当于提高了CDN命中率,进而提高用户体验度,访问速度更快
但某些接口为“一次性接口”,进而导致产生连续报错
最终结果
WordPress网站不要开此选项,此选项并无太大优化作用。如有问题可提交腾讯云工单处理
腾讯工单真的快