源站响应302时,可能有如下两种场景,分别对应不同解决方案:
场景一:
客户网站使用CDN加速后,用户的请求会经由CDN节点回源,此时如果源站基于用户的某些属性做了不同的跳转处理,例如针对PC端大屏用户返回页面A,针对手机端用户302跳转至页面B,此时如果CDN节点缓存了源站的302跳转页面,可能会导致PC端大屏用户访问到CDN节点时,也302跳转至页面B,与客户预期不匹配。
解决方案:如客户未在CDN加速控制台配置302缓存规则,则CDN节点一般遵循源站的缓存相关头部执行缓存策略。针对上述情况,可在源站增加不缓存头的方式(不缓存头包括Cache-Control:no-cache/private/no-store;Pragma:no-cache),实现302响应在CDN节点不缓存;同时在CDN加速控制台上配置302跳转后的页面在CDN节点缓存。通过如上方式来确保客户源站对不同用户的302跳转策略生效的同时,仍能充分利用CDN的缓存特性,提升用户体验和感知。
场景二:
- 部分客户源站做了请求粒度的负载均衡,即对不同CDN回源请求可能会302跳转至不同的源站地址。如果CDN直接把源站302跳转地址透传给用户,则用户会访问到客户源站,非客户预期。
- 部分客户源站对CDN节点请求返回302,只是因为该文件内容转移到相同域名另外的地址,如果CDN直接把源站302地址透传给用户,则会增加用户与CDN节点间的302交互次数,增加用户获取内容的时延,影响用户体验。
解决方案:如要避免上述问题,可以配置回源302/301跟随功能。功能开启后,CDN节点会代替用户去处理源站给出的302/301状态码内容,即CDN节点会直接到源站302/301响应中的Location地址请求资源并缓存,同时将其返回给用户。回源302/301跟随功能的具体介绍及配置说明,详情请见:回源302/301跟随。