前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDN节点和源站结果不一致

CDN节点和源站结果不一致

原创
作者头像
冰糕块块
修改2022-01-11 10:43:38
2.2K0
修改2022-01-11 10:43:38
举报
文章被收录于专栏:技术小生活

知识点

CDN作为分布式加速系统,不管如何,只是作为加速,不会对资源更改,返回给客户的内容需要和源站保持一致

问题描述

客户端请求经过CDN节点与直接访问源站的结果不同

问题分析

当客户端请求到达CDN节点后,会进行下列判断

命中缓存且缓存数据没有过期

CDN节点直接返回结果给客户端

未命中缓存

CDN节点转发客户端请求,同时在HTTP Request Header请求头中追加一些特定的参数,最终请求源站

原理图

某些情况下,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式,导致客户端请求被处理后的结果与直接访问源站不一致

例如:源站会判断请求头中是否含有Via参数,以此确认请求是否来自代理服务器,然后做出不同的响应。

解决方案

通过下列两个步骤进行处理

  1. 定位导致此问题的请求参数
  2. 修改源站配置或者删除问题参数

步骤一:定位导致此问题的请求头参数

由于源站只针对特定的请求头参数返回不同的结果,所以需要先定位该特定的参数。定位步骤如下

在本地通过以下curl命令直接访问源站,并记录返回结果

代码语言:javascript
复制
curl -voa 'http://www.[$Your_Wesbite].com' -x [$Source_Server_IP]:[$Source_Server_Port]
  • [$Your_Wesbite]:指您的网站域名。
  • [$Source_Server_IP]:指源站服务器的公网IP地址。
  • [$Source_Server_Port]:指源站服务器的网站端口,通常该端口为80或443。

在本地通过以下curl命令,附加阿里云CDN节点的特定请求头参数,然后请求源站,并记录返回结果

代码语言:javascript
复制
curl -voa 'http://www.[$Your_Wesbite].com' -x [$Source_Server_IP]:[$Source_Server_Port] -H 'header'

对比步骤1和步骤2的结果,检查是否存在不一致的情况

结果一致。 请循环步骤1和步骤2,同时替换步骤2中的请求头参数,直到返回结果不一致。

结果不同。 记录结果不同时的请求头参数,然后继续下一步骤。

步骤二:修改源站配置或者删除问题参数

当定位到具体的请求头参数时,可参考下面两种方式进行处理:

修改源站配置

请检查源站的Web服务器配置,是否存在根据不同的请求头有不同响应的配置。如果存在,请根据实际需求进行调整

在CDN控制台删除追加的请求头参数

如果定位到的请求头参数对您的业务没有实际作用,您可以在CDN控制台配置删除该请求头参数。

CDN节点追加的特定参数
代码语言:javascript
复制
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

重要的参数说明

  • Via:请求经过的CDN节点信息。
  • Ali-Cdn-Real-Ip:客户端真实IP地址。
  • Ali-Swift-Range-Cache:如果您启用了Range回源,CDN节点就会追加该参数,详情请参见配置range回源。
  • X-Forwarded-For:标准的HTTP XFF字段。

小结

用户通过 URL 进行资源访问时,真实的客户访问资源时并不会关心节点和源站资源是否一致,一般都是cdn厂商的客户反馈访问节点和直接访问源站结果不一致或者节点回源拉取资源后和源站资源不一致,当用户通过 URL 进行资源访问时,如节点资源过期节点转发客户端请求,同时在HTTP Request Header请求头中追加一些特定的参数,请求源站,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式,导致客户端请求被处理后的结果与直接访问源站不一致。如果不需要请求头参数,可根据情况调整,同时注意域名是否有配置gzip压缩、图片转换、回源url改写,一般遇到节点和源站可以考虑下刷新。

疑问

哪些某些情况下,源站对于HTTP Request Header请求头中追加的特定参数会有不同的处理方式

当客户端请求到达CDN节点后,谁来判断是否命中cdn节点且缓存是否过期

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点
  • 问题描述
  • 问题分析
  • 解决方案
    • 步骤一:定位导致此问题的请求头参数
      • 步骤二:修改源站配置或者删除问题参数
      • 小结
      • 疑问
      相关产品与服务
      内容分发网络 CDN
      内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档