CDN作为分布式加速系统,不管如何,只是作为加速,不会对资源更改,返回给客户的内容需要和源站保持一致
客户端请求经过CDN节点与直接访问源站的结果不同
当客户端请求到达CDN节点后,会进行下列判断
命中缓存且缓存数据没有过期
CDN节点直接返回结果给客户端
未命中缓存
CDN节点转发客户端请求,同时在HTTP Request Header请求头中追加一些特定的参数,最终请求源站
原理图
某些情况下,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式,导致客户端请求被处理后的结果与直接访问源站不一致
例如:源站会判断请求头中是否含有Via参数,以此确认请求是否来自代理服务器,然后做出不同的响应。
通过下列两个步骤进行处理
由于源站只针对特定的请求头参数返回不同的结果,所以需要先定位该特定的参数。定位步骤如下
在本地通过以下curl命令直接访问源站,并记录返回结果
curl -voa 'http://www.[$Your_Wesbite].com' -x [$Source_Server_IP]:[$Source_Server_Port]
在本地通过以下curl命令,附加阿里云CDN节点的特定请求头参数,然后请求源站,并记录返回结果
curl -voa 'http://www.[$Your_Wesbite].com' -x [$Source_Server_IP]:[$Source_Server_Port] -H 'header'
对比步骤1和步骤2的结果,检查是否存在不一致的情况
结果一致。 请循环步骤1和步骤2,同时替换步骤2中的请求头参数,直到返回结果不一致。
结果不同。 记录结果不同时的请求头参数,然后继续下一步骤。
当定位到具体的请求头参数时,可参考下面两种方式进行处理:
修改源站配置
请检查源站的Web服务器配置,是否存在根据不同的请求头有不同响应的配置。如果存在,请根据实际需求进行调整
在CDN控制台删除追加的请求头参数
如果定位到的请求头参数对您的业务没有实际作用,您可以在CDN控制台配置删除该请求头参数。
Via: cn2**6.l1, vcache10.cn**36, l2cn**5.l2, cache28.l**35
Eagleeye-Traceid: 24689aa4*******58162753e
Ali-Swift-Log-Host: test.***.cn
Ali-Swift-Stat-Host: level2.test.***.cn
X-Forwarded-For: 58.***.***.41
X-Client-Scheme: http
Ali-Cdn-Real-Ip: 58.***.***.41
Ali-Swift-5Xx-No-Retry: on
Cdn-Src-Ip: 127.0.0.1
Ali-Swift-Range-Cache: on
重要的参数说明
用户通过 URL 进行资源访问时,真实的客户访问资源时并不会关心节点和源站资源是否一致,一般都是cdn厂商的客户反馈访问节点和直接访问源站结果不一致或者节点回源拉取资源后和源站资源不一致,当用户通过 URL 进行资源访问时,如节点资源过期节点转发客户端请求,同时在HTTP Request Header请求头中追加一些特定的参数,请求源站,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式,导致客户端请求被处理后的结果与直接访问源站不一致。如果不需要请求头参数,可根据情况调整,同时注意域名是否有配置gzip压缩、图片转换、回源url改写,一般遇到节点和源站可以考虑下刷新。
哪些某些情况下,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式
当客户端请求到达CDN节点后,谁来判断是否命中cdn节点且缓存是否过期
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。