Nginx系列(十六):HTTP Vary机制
一、概念
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机制相关推荐
- Java学习系列(十六)Java面向对象之基于TCP协议的网络通信
TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...
- 来自极客标签10款最新设计素材-系列十六
本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型 [我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险.在信息处理中,这个原理同样适用.在数学上,这个原理 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...
- 《SpringBoot系列十六》条件装配时ConfigurationCondition和Condition有什么区别?什么时候用ConfigurationCondition?
一.前言 针对条件装配我们讨论了如下内容: <SpringBoot系列十一>:精讲如何使用@Conditional系列注解做条件装配 <SpringBoot系列十二>:如何自定 ...
- Oracle Golden Gate 系列十六 -- 配置 GG 安全 说明 与 示例
由于GoldenGate所需的用户权限较大,而每个GoldenGate进程配置文件中都需要设置该用户和密码用于数据库登陆,出于安全性的考虑,建议将密码进行加密. 官方文档上介绍的加密有如下三种方法: ...
- ES系列十六、集群配置和维护管理
一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...
- nginx(三十六)健康检查
一 ngx_http_upstream_module 官方自带 ① server 1. 该指令用于'指定后端服务器'的名称和'optional'参数2. 服务器的名称可以是一个'域名'.一 ...
最新文章
- BZOJ - 3963: [WF2011]MachineWorks
- 三极管hFE参数随着Ic,Vc的变化情况
- mysql insert into 变量+1_如何在MySQL INSERT语句中包含PHP变量
- 继续聊WPF——动态数据模板
- 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
- mysql 8 my.cfg_搭建lamp环境以及安装配置phpmyadmin
- Oracle锁庞大介绍
- 挖掘11亿用户背后的产品逻辑之美
- 分享一次学习中遇到的问题
- preempt_count
- novatel中DGPS和RTK以及ppp的terrraStar-x的记录
- A*算法中二叉堆的使用
- Android 图片控件ImageView
- 什么是静态测试?什么是动态测试?
- 一键搭建Centos开发环境
- 什么是modbus通信协议?
- java去掉可最后一个逗号
- uboot配置,编译,移植
- keil写文字怎么会乱码_刚刚!2020福建高考作文题出炉!你会怎么写?
- 推荐顶级色彩网站-灵感,调色板,工具和其他色彩资源
热门文章
- 2019 年博客总结
- jsp页面如何调用本机的应用程序?例如c:/netterm.exe?
- Java每日一练(4)
- mediasoup json 通信协议2--room.js和router.cpp信令
- 吴恩达《机器学习》课程总结
- 最近超火的太空人动态壁纸,手机也能使用!
- 总投资460亿!陈十一院士任校长,东方理工大学年薪40-60万招人
- 腾讯安全【数实融合 安全共赢】圆桌栏目,精彩来袭
- java实心圆_html5使用canvas画空心圆与实心圆
- 【报错】“OSError: [Errno 22] Invalid argument: ‘cache\\resume_lattice_only_tra”