CDN(Content Delivery Network内容分发网络)是将源站内容分发至全球的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它能够有效解决网络带宽小、用户访问量大、网点分布不均等问题。

CDN 相关指标

header中的指标代表不同的含义

X-Cache

标识CDN是否命中

  • HIT:命中缓存节点,即在缓存节点可拉取数据,无需回源
  • MISS:未命中缓存节点,需要回源拉取数据

Pragma

Pragma:HTTP1.0 时代的遗留产物,该字段被设置为no-cache时,会告知浏览器禁用本地缓存,即每次都向服务器发送请求

Expires

Expires:HTTP1.0 时代用来启用本地缓存的字段,expires值对应一个形如Thu,31Dec2037 23:55:55GMT的格林威治时间,告诉浏览器缓存实现的时刻,如果还没到该时刻,标明缓存有效,无需发送请求

注意:如果浏览器与服务器的时间差距大,使用 Expires 就会影响缓存结果。

Cache-Control

Cache-Control 是 HTTP1.1 针对 Expires 时间不一致的解决方案,运用Cache-Control告知浏览器缓存过期的时间间隔而不是时刻,即使具体时间不一致,也不影响缓存的管理。

  • no-store:禁止浏览器缓存响应
  • no-cache:不允许直接使用本地缓存,先发起请求和服务器协商
  • max-age=delta-seconds:告知浏览器该响应本地缓存有效的最长期限,以秒为单位

说明:

  • Pragma,Cache-Control,Expires的执行优先级:Pragma > Cache-Control > Expires

ETag

Etag是文件的指纹标识符:HTTP1.1推出,如果文件内容修改,指纹会改变

  • EtagHTTP1.1中提出的,通过在jscssimage响应是添加一个唯一的参数
  • Etag有服务器端生成,随文件的改变而改变,Etags类似于文件的指纹
  • 浏览器通过Etag判断文件是否发生变化

协商缓存相关Header

  • Last-Modified:通知浏览器资源的最后修改时间
  • If-Modified-Since:得到资源的最后修改时间后,会将这个信息通过If-Modified-Since提交到服务器做检查,如果没有修改,返回304状态码
  • If-None-Match:本地缓存失效,会携带此值去请求服务端,服务端判断该资源是否改变,如果没有改变,直接使用本地缓存,返回304

缓存相关返回码:

  • 200 from cache:直接从本地缓存中获取响应,最快速,不产生数据流量
  • 304 Not Modified:协商缓存,浏览器在本地没有命中的情况下,请求头中发送一定的校验数据到服务端,如果服务端数据没有改变浏览器从本地缓存响应,返回304
  • 200 OK:以上两种缓存全都失败,服务器返回完整响应。没有用到缓存,相对最慢。

via

Via 一般报头由代理加入,正向和反向代理,并且可以在请求头和响应标头出现。作用如下:

  • 跟踪消息转发,避免请求循环
  • 识别请求/响应链中发送者的协议

防盗链的工作原理

访问网站来源和nginx中我们的配置做对比:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测到来源不是本站即进行阻止或者返回指定的页面

常用方法

  • 检测Referer
  • 资源签名检测

参考

  1. HTTP缓存策略
  2. Trafficserver 配置与使用
Home Archives Categories Tags Statistics