nginx(七十五)nginx与Vary响应头细节探讨

一  Vary

①  nginx与Vary有关联的地方

nginx源码分析处理Vary响应头的逻辑

CORS和缓存

gzip_vary

1) gzip_vary on 如果设置为'开启'

2) 服务器'返回数据'时会在头部带上"Vary:Accept-Encoding"的标识

3) 客户端便可以知道获取到的数据'是否已经被压缩',默认为'关闭'

proxy_cache_valid

proxy_ignore_headers  相关参考

  

②  CDN与Vary

不同CDN厂商的Vary实现不标准导致跨域不生效

华为云CDN不支持自定义Vary响应头设置

腾讯云CDN Vary特性当前处于恢复支持

③  Vary细节

Vary: Accept-Encoding, User-Agent, Referer  --> 多个'请求头'逗号分割

Vary: User-Agent                            --> 'PC和手机端'

Vary: Accept-Encoding                       --> '观察Content-Length'是否压缩传输

备注: 多个'头部',多个'请求头'的值共同作为'缓存'条件

④   如何通过Vary命中缓存

1) 他们一般以'proxy_cache_key'为key值进行缓存;

2) Vary属性的设置,告诉'缓存服务器'根据proxy_cache_key和Vary响应头中的请求头值共同作为key

  

案例1说明: 非'缓存'应用,而是是否进行'压缩'

  1) 浏览器请求的信息里带上了Accept-Encoding:gzip 则返回'压缩'副本

  2) 如果没有带这个头信息,默认返回'非压缩'副本。

HTTP报文头加上Vary让CDN缓存不同版本 

案例2: 虽然'proxy_cache_key'相同,但是'不同的agent'客户端访问,第二次没有'命中'

请求流: client --> nginx '缓存服务器'  --> 源站 '设置 Vary: User-Agent'

  验证1: add_header HIT_CACHE "$upstream_cache_status"

     效果:第一个客户端访问之后,第二个客户端'相同url'第一次访问没有命中,从源站获取资源

  验证2: 第一个客户端同一个'url'访问之后,更新'源站'资源,然后第二个客户端'相同url'第一次访问

     效果:第二个客户端'第一次'访问直接'获取更新的资源'

案例3: Vary: Origin,Accept-Encoding

  场景: 'CORS',不同'Origin'访问同一资源,都会从'源站'获取资源

⑤  Vary参考连接

nginx隐藏Vary头信息

Is it safe to use proxy_ignore_headers Vary?

nginx源代码分析Vary机制

Vary最佳实践

代理的Vary首部压缩

nginx源码分析处理Vary响应头的逻辑

由于上游返回Vary头,以及nginx开启gzip_vary指令,导致客户端收到重复Vary头

Caching of Access-Control-Allow-Origin value cross-site

记一场由Vary引发的风波---案例篇

请求流: Client-->CDN-->代理源站-->真正源站

根因: 代理源站'没有透传'真正源站的'Vary header'给CDN

⑥  杂谈

1.gzip_static配置优先级高于gzip 
2.开启nginx_static后,对于任何文件都会先查找是否有对应的gz文件 
3.gzip_types设置对gzip_static无效 

nginx如何处理缓存

nginx缓存优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值