解决使用CDN后无法判断PC端或者移动端的问题
一般我们是通过JS 判断当前浏览器的信息
问题描述
需要设置CDN对不同的UA做不同的缓存,实现手机访问网站跳转到Wap页面,PC端访问跳转到PC端的页面。
问题原因
因为通过UserAgent头识别用户的客户端,然后返回不同的内容给不同的UA用户。但是CDN缓存并不会区分UA,只会区分URL,所以相同URL缓存的内容是一致的,无论UA是什么样
解决方案
CDN是支持对不同的UA,设置不同的缓存,这个是根据vary头来控制的。vary头里面的字段一般是头信息的字段,表示CDN会检测这个头信息。如果内容不一致就缓存不同的内容,命中时也一样,必须头信息一致才会缓存。这个vary头需要在源站添加。在Nginx中增加如下信息。
add_header Vary "Accept-Encoding, User-Agent";
以 aws 的为例;
我们可以将 User-Agent 加入 白名单标头,这样cdn 就不会对它进行缓存了
第一次接触这个知识点,按照自己理解做了个笔记,有不对的地方,希望大佬们指出。