为啥CDN访问到的文件和直接回源结果不一样

背景说明

使用天翼云CDN加速后,如用户请求的文件在节点已有缓存,则直接响应给用户;如用户请求的文件为首次访问,或文件过期,则CDN节点会回源站获取文件,缓存在节点并响应给用户。

正常情况下,用户请求CDN节点和直接访问源站,访问到的内容相同。本文主要介绍CDN节点和源站文件内容如果不一致时,可能的原因及解决方案。

1.CDN节点回源,会在用户请求基础上增加部分请求头,源站如对相应请求头有处理策略上的差异,可能会导致响应不同内容

用户请求至CDN节点后,CDN节点会在原始请求头基础上增加类似如下的请求头:

  • Ctl-Src-Ip:128.xxx.xxx.xx;该请求头值为终端用户客户端ip,源站可基于该请求头识别终端用户ip并做统计。
  • Via: http/1.1 fj-ningde5-xxx[aff7324a-97b3-46da-af21-ba85e1876868] (ApacheTrafficServer/xxx);该请求头值为请求进入CDN节点后经过的节点信息。
  • Request-Id:9011f7a06787a0fd560cd724dd9989fb;该请求头值为对应请求的唯一ID。
  • Ctl-Origin-Scheme: http;该请求头值为回源时使用的协议类型。

如果源站针对上述请求头有做特殊处理,例如,有Via时可能响应不同的值,则会导致CDN和源站响应不同内容。

解决方案:可尝试通过直接回源请求,并逐个新增携带上述请求头,对比是否与源站获取的内容一致,直到找到造成响应差异的对应请求头。此后,可通过调整源站设置,或在CDN节点配置去掉对应请求头来规避问题。目前,删除CDN内部请求头尚不支持自助,需要提交工单给天翼云客服人工处理。

2.源站不支持压缩,CDN节点开启压缩

如果源站不支持压缩,但CDN节点配置了压缩,此时客户端请求头如有携带:Accept-Encoding:gzip,deflate,则源站返回为非压缩文件,CDN节点返回为gzip压缩文件,此时会造成客户端访问到的文件内容不同。

解决方案:该情况为预期中的正常情况,无需处置。

3.CDN配置了多个源站,且AB源内容不同步

如果CDN配置了多个源站,例如源A和源B,其中A为主源,B为备源;而同个文件在源A和源B之间未进行同步,此时可能会导致CDN节点回A源获取并缓存的文件,与客户端直接回B源获取到的文件不一致。

解决方案:CDN的多个源站之间应保持数据同步,避免出现不一致的情况。

4.CDN节点回源被劫持(需要多注意)

如果CDN节点回源使用的是http协议,则在回源过程中可能会被劫持,导致CDN节点缓存的内容与源站内容不一致。

解决方案:CDN节点回源调整为https协议,避免被劫持。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值