各位看官来看看这些漫天开价的请求头~!这像什么话,还有王法吗?还有法律吗?

小生数了一下,居然有19个之多。但是不必着急,其实说到底,与CDN相关的缓存控制、回源控制的内容,只有8个,是咱们截图中,橙黄色标记那8个。这一次咱们先把这8个标橙色的字段搞清楚。简单而言,是2套半衣服(if)+1个哲学基本问题乱入的组合体~~~!

(一)2套半衣服(if):if-XXX都是条件请求,只有符合条件的,才会执行返回内容的动作。
1、一套合身的衣服(if-match/if-none-match)
所谓衣服合不合身主要看一个参数:ETAG。
比如下图


同理,if-none-match,只有当请求头里面的etag值与服务器端的etag值不一样的时候,服务器才会返回内容。
2、一套改版的衣服(if-modified-since/if-unmodified-since)
如果在字段指定的日期之后发生了内容更新,请发给我新的资源,否则服务器会返回304,not modified,浏览器一般会从本地缓存拿已经获取到的信息。


3、半截裤(if-range)
if-range一般和range配合使用,当if-range字段指定的Etag值与服务器一致时,就执行range请求动作。否则服务器会返回整个文件内容,而不是指定范围的字节内容。



(二)1个哲学基本问题(我是谁?我来自哪里?我要去哪里?)
1、我是谁?(user-agent)
其实就是咱们使用了啥浏览器去请求访问的,有些时候CDN需要根据不同的user-agent,比如手机的请求,就去手机版本的源站获取内容,而PC浏览器的,则去PC Web源站拿内容。

2、我从哪里来(referer)
这是告知服务器,我的这个请求原始资源来自哪里。一般都是安全方面考虑,比如某个网盘应用,它只希望来自内容域名的链接访问才会响应。这时就可以采用这种方式,过滤非本站域名的请求。

3、我要去哪里(host)
告知服务器,我请求的host的主机名是哪一个?因为需要IP指向的服务器可能会有多个域名同时在服务器,服务器端就需要通过这个字段,来区分不同的web应用,这一点CDN尤其重要。因为一台CDN服务器会代理N多个不同客户的域名,需要用这个host去标识不同的请求去向。