一、概念

apache在响应头中返回了一个vary:Accept-encoding ,则squid在存储缓存文件时需要将“我的浏览器”发出的请求头信息中的Accept-encoding字段的值(大多情况就是gzip,deflate之类的)作为缓存key的一部分,因此对于不同的Accept-encoding字段值,都需要保存不同的文件。

二、请求阶段

在通过key值获取到缓存文件后(ngx_http_file_cache_read),如果缓存头包含vary信息,则计算该请求的variant,如果计算结果和缓存头中的variant值不一致,说明该节点不匹配。需要将variant值作为key,重新查找缓存节点(如果不存在则新建节点,将variant保存为key)。并设置r->cache->secondary位,表明该请求的是一个variant变化了的节点。

if (h->vary_len) {
/*根据缓存文件保存的响应vary信息,计算请求的variant值*/ngx_http_file_cache_vary(r, h->vary, h->vary_len, c->variant);
/*如果variant值不匹配,说明该缓存节点不要要找的。将variant作为key,查找新的缓存节点*/if (ngx_memcmp(c->variant, h->variant, NGX_HTTP_CACHE_KEY_LEN) != 0) {ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,"http file cache vary mismatch");return ngx_http_file_cache_reopen(r, c);}
}

三、响应阶段(ngx_http_file_cache_set_header)

   /*根据响应vary和请求,生成variant*/if (!c->secondary) {return NGX_OK;}/*如果新生成的variant,和保存的key(实际是旧节点的variant)一致,则说明响应vary未变化,只是请求variant发生变化,那么保存该variant作为key的节点。否则,说明响应vary发生了变化,更新旧节点*/if (c->vary.len&& ngx_memcmp(c->variant, c->key, NGX_HTTP_CACHE_KEY_LEN) == 0){return NGX_OK;}

Nginx系列(十六):HTTP Vary机制相关推荐

  1. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  2. 来自极客标签10款最新设计素材-系列十六

    本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...

  3. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型

    数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...

  4. 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型

    数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型 [我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险.在信息处理中,这个原理同样适用.在数学上,这个原理 ...

  5. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...

    数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...

  6. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...

  7. 《SpringBoot系列十六》条件装配时ConfigurationCondition和Condition有什么区别?什么时候用ConfigurationCondition?

    一.前言 针对条件装配我们讨论了如下内容: <SpringBoot系列十一>:精讲如何使用@Conditional系列注解做条件装配 <SpringBoot系列十二>:如何自定 ...

  8. Oracle Golden Gate 系列十六 -- 配置 GG 安全 说明 与 示例

    由于GoldenGate所需的用户权限较大,而每个GoldenGate进程配置文件中都需要设置该用户和密码用于数据库登陆,出于安全性的考虑,建议将密码进行加密. 官方文档上介绍的加密有如下三种方法: ...

  9. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

  10. nginx(三十六)健康检查

    一   ngx_http_upstream_module  官方自带 ①    server 1. 该指令用于'指定后端服务器'的名称和'optional'参数2. 服务器的名称可以是一个'域名'.一 ...

最新文章

  1. BZOJ - 3963: [WF2011]MachineWorks
  2. 三极管hFE参数随着Ic,Vc的变化情况
  3. mysql insert into 变量+1_如何在MySQL INSERT语句中包含PHP变量
  4. 继续聊WPF——动态数据模板
  5. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
  6. mysql 8 my.cfg_搭建lamp环境以及安装配置phpmyadmin
  7. Oracle锁庞大介绍
  8. 挖掘11亿用户背后的产品逻辑之美
  9. 分享一次学习中遇到的问题
  10. preempt_count
  11. novatel中DGPS和RTK以及ppp的terrraStar-x的记录
  12. A*算法中二叉堆的使用
  13. Android 图片控件ImageView
  14. 什么是静态测试?什么是动态测试?
  15. 一键搭建Centos开发环境
  16. 什么是modbus通信协议?
  17. java去掉可最后一个逗号
  18. uboot配置,编译,移植
  19. keil写文字怎么会乱码_刚刚!2020福建高考作文题出炉!你会怎么写?
  20. 推荐顶级色彩网站-灵感,调色板,工具和其他色彩资源

热门文章

  1. 2019 年博客总结
  2. jsp页面如何调用本机的应用程序?例如c:/netterm.exe?
  3. Java每日一练(4)
  4. mediasoup json 通信协议2--room.js和router.cpp信令
  5. 吴恩达《机器学习》课程总结
  6. 最近超火的太空人动态壁纸,手机也能使用!
  7. 总投资460亿!陈十一院士任校长,东方理工大学年薪40-60万招人
  8. 腾讯安全【数实融合 安全共赢】圆桌栏目,精彩来袭
  9. java实心圆_html5使用canvas画空心圆与实心圆
  10. 【报错】“OSError: [Errno 22] Invalid argument: ‘cache\\resume_lattice_only_tra”