nginx etag学习_nginx etag配置-csdn博客


本站和网页 https://blog.csdn.net/libinbin_1014/article/details/101769345 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Nginx Etag学习_nginx etag配置-CSDN博客
Nginx Etag学习
最新推荐文章于 2023-07-17 16:00:14 发布
libinbin_1014
阅读量4.1k
收藏
点赞数
分类专栏:
linux
nginx
文章标签:
etag
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/libinbin_1014/article/details/101769345
版权
同时被 2 个专栏收录
52 篇文章
1 订阅
订阅专栏
4 篇文章
0 订阅
Nginx Etag
什么是Etag
Last-Modified / If-Modified-Since
Etag工作原理
为什么要使用Etag
Etag字符含义
强Etag和弱Etag
Etag丢失问题
Etag配置
Etag带来的问题
Etag其实是一个页面的Hash值,当浏览器刷新页面的时候,浏览器会发送页面的Etag值,让服务器进行比较,服务器如果发现eTag值没变,则返回304,浏览器则从缓存中获取页面,如果不相等,则重新获取页面,
如果eTag过期,则重新获取页面。
当请求一个页面时,如果浏览器使用本地缓存,因此我们经常会看到一个HTTP请求为304状态。或者显示200状态,在chrome下标注是from cache,在火狐下会标注BFCache;
我们希望在服务器端更新了静态文件(如css、js、图片),能够在客户端得到及时的更新,但又不想让浏览器每次请求都从服务器端获取静态资源。那么就需要用到Last-Modified/if-Modified-Since
当浏览器第一次请求一个url时,服务器端的返回状态码为200,同时HTTP响应头会有一个Last-Modified标记着文件在服务器端最后被修改的时间
览器第二次请求上次请求过的url时,浏览器会在HTTP请求头添加一个If-Modified-Since的标记,用来询问服务器该时间之后文件是否被修改过.
如果服务器端的资源没有变化,则自动返回304状态,使用浏览器缓存,从而保证了浏览器不会重复从服务器端获取资源,也保证了服务器有变化是,客户端能够及时得到最新的资源。
当浏览器第一次请求一个url时,服务器端的返回状态码为200,同时HTTP响应头会有一个Etag,存放着服务器端生成的一个序列值
浏览器第二次请求上次请求过的url时,浏览器会在HTTP请求头添加一个If-None-Match的标记,用来询问服务器该文件有没有被修改。
Etag主要为了解决Last-Modified无法解决的一些问题
一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新GET;
某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒)
某些服务器不能精确的得到文件的最后修改时间;
为此,HTTP/1.1引入了Etag(EntityTags)
Etag"2e681a-6-5d044840"
这里面的三个段,分别代表了INode,MTime,Size根据算法算出的值的Hex格式(不要误以为Etag就是固定的3段式)
强Etag根据配置文件中的配置来设置Etag值,默认的Apache的FileEtag设置为:
FileEtag INode Mtime Size
也就是根据这三个属性来生成Etag值,他们之间通过一些算法来实现,并输出成hex的格式,相邻属性之间用-分隔,比如:Etag “2e681a-6-5d044840”
弱Etag是在前面加个W/
如下形式
强ETag表示形式:"22FAA065-2664-4197-9C5E-C92EA03D0A16"。
弱ETag表现形式:w/"22FAA065-2664-4197-9C5E-C92EA03D0A16"。
强、弱ETag类型的出现与Apache服务器计算ETag的方式有关。Apache默认通过FileEtag中FileEtag INode Mtime Size的配置自动生成ETag(当然也可以通过用户自定义的方式)。
假设服务端的资源频繁被修改(如1秒内修改了N次),此时如果有用户将Apache的配置改为MTime,由于MTime只能精确到秒,那么就可以避免强ETag在1秒内的ETag总是不同而频繁刷新Cache(如果资源在秒级经常被修改,也可以通过Last-Modified来解决)。
如果是这种情况,Apache会自动判断请求时间和修改时间之间的差值,如果小于1s,Apache会认为这个文件在这1秒内可能会再次被修改,因此生成一个弱Etag(WeakEtag),这个Etag仅仅基于MTime来生成,因此MTime只能精确到s,所以1s内生成的Etag总是一样,这样就避免了使用强Etag造成的1s内频繁的刷新Cache的情况。(貌似不用Etag,仅仅使用Last-Modified就可以解决,但是这针对的仅仅是修改超级频繁的情况,很多文件可能同时也使用强Etag验证)。
nginx 在开启了 gzip 之后,如果有 ETAG 则会调用 ngx_http_clear_etag 将其清除。从 nginx 1.7.3 这个版本之后,nginx 不再强硬地清除 ETAG 了,而是换了一种 weak ETAG 的策略。
nginx是默认开始etag的。
关闭
etag off;
ETag的问题在于通常使用某些属性来构造它,有些属性对于特定的部署了网站的服务器来说是唯一的。当使用集群服务器的时候,浏览器从一台服务器上获取了原始组件,之后又向另外一台不同的服务器发起条件GET请求,ETag就会出现不匹配的状况。
解决思路:
如果使用Last-Modified不会出现任何问题,可以直接移除ETag,google的搜索首页则没有使用ETag。
确定要使用ETag,在配置ETag的值的时候,移除可能影响到组件集群服务器验证的属性,例如只包含组件大小和时间戳。
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
Nginx Etag学习Nginx Etag什么是EtagLast-Modified / If-Modified-SinceEtag工作原理为什么要使用EtagEtag字符含义强Etag和弱EtagEtag丢失问题Etag配置Etag带来的问题Nginx Etag什么是EtagEtag其实是一个页面的Hash值,当浏览器刷新页面的时候,浏览器会发送页面的Etag值,让服务器进行比较,服务器如...
复制链接
扫一扫
专栏目录
学习
笔记1
08-03
安装 和使用安装常用命令
配置
文件
.conf
文件三部分组成:全局块,event块,http块全局块:从
文件开始到events块之间的内容,主要设
+lua
02-24
1.1.网关架构1.2.
命令和信号控制
-sstop快速关闭,不管有没有正在处理的请求
-squit优雅关闭方式,推出前完成已经接受的连接请求
-c
文件地址启动
-sreload重启
-sreopen重新打开日志
-t检查
文件是否正确kill-INTpid表示快速关闭kill-HUPpid表示重启通过信号控制的方式实现和命令相同的功能1.3.
平滑升级下载高版本
,解压缩执行指令执行信号平滑升级关闭旧的进程1.4.
文件ulimit-n查看liunx最多同时打开的文件句柄数,可通过linux
参与评论
您还未登录,请先
登录
后发表或查看评论
源码
资料
02-10
自己的
资料,包含《
Nginx
模块开发指南》和《深入理解
》等,方便初学者了解
设计思想以及源码
01-09
应用
简介与其它web服务器的对比
环境搭建下载官网
[http://
.org](http://
.org)
下载Stable version
稳定版安装Linux安装安装后的文件说明Windows安装启动关闭
检查其它
应用及
文章引用 https://blog.csdn.net/qq_41681399/article/details/105223698
环境搭建
下载官网
http://
.org
稳定版
Etag
和Expires 性能调优
01-20
1、
和Expires中Client 端Http Request Header及Server端Http Reponse Header工作原理。2、静态下Apache、Lighttpd和
和Expires
3、非实时交互动态页面中
和Expires处理在客户端通过浏览器发出第一次请求某一个URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应同时记录相关属性标记(Http Reponse Header),服务器端的返回状态会是200,格式类似如下:HTTP/1.1 200 OKDate: Tue, 0
参数
OfficerGoodbody的博客
09-01
1062
参数说明
默认值:
on;
其实是一个页面的Hash值,当浏览器刷新页面的时候,浏览器会发送页面的
值,让服务器进行比较,服务器如果发现
值没变,则返回304,浏览器则从缓存中获取页面,如果不相等,则重新获取页面,如果
过期,则重新获取页面。
参考文献:
https://blog.csdn.net/libinbin_...
客户端缓存
和If-None-Match
小楼一夜听春雨,深巷明朝卖杏花
05-25
5022
浏览器缓存和
缓存
使用缓存是最有效的提高访问速度的方法,在web服务器的场景当中不仅要考虑
作为缓存服务时候的使用方法还得考虑浏览器中的缓存失效的场景,因为浏览器缓存是否生效可以通过
指令去控制。浏览器的缓存对用户体验也是最大的。
使用浏览器缓存,即本地缓存,只需要读取本地的磁盘或者内存就可以了。通常是同时使用浏览器和
缓存。
头部
是存在于HTTP响应当中的,是
向浏览器返回时添加的,它来标识一个特定版本的资源,
的值是通过上次.
的使用
qq_46624276的博客
11-03
1098
对于一些视频播放,用于点击到视频的某个位置,浏览器会发起range请求,请求到对应位置在加载。每秒生成N个令牌,每进来一个请求可以拿走n个或一个令牌,享受不同的带宽。qps为每秒6800。qps为每秒7600。
(二十六)ngx_http_headers_nodule模块
wzj_110的博客
04-01
4800
add_header指令
① 基本解读
细节点:
中'子块[eg:location]'中的'add_header'会'覆盖父块[eg:server全局]',而'不是'继承
补充:同一'level',不能有相同的'响应头'
1) add_header 指令用于添加返回头字段;如果没有'always'参数,当且仅当'状态码为图中列出'的那些时有效
2) 如果提供了'第三个参数 always',那么'无论状态码'是多少,'都会'带上 -->即使是'404的错误页面'...
weixin_42549581的博客
09-23
902
是什么?
是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。
专为性能优化而开发,是一个快速且能经受高负载考验的 web server.
Source:
(发音同engine x),它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在...
常用功能(动静分离、压缩、缓存)
keizhige的博客
07-04
1090
是目前负载均衡技术中的主流方案,几乎绝大部分项目都会使用它,
是一个轻量级的高性能HTTP反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。在理论上单节点的
同时支持5W并发连接,而实际生产环境中,硬件基础到位再结合简单调优后确实能达到该数值。
cache-control
说明
zzhongcy的专栏
1万+
网上看到这篇文章说明,很不错,这里转载
一下。
下关于缓存控制字段cache-control的
说明 - 运维小结 - 散尽浮华 - 博客园
前言
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。请求时的缓存指令:
包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached...
浏览器缓存 (试验)
ZkMao1007的博客
11-10
1545
浏览器缓存
静态资源部署
最新发布
一步一个脚印,踏实努力,向着目标前进
07-17
要在
上部署静态资源,可以按照以下步骤进行操作:确保已经安装并
。如果还没有安装,可以参考
的官方文档进行安装和
。将静态资源文件复制到
的默认静态文件目录下。默认情况下,
的静态文件目录是或。你可以将你的静态资源文件复制到这个目录下,或者根据需要修改
文件中的静态文件目录。
的虚拟主机或服务器块。打开
文件(通常是或),找到server在上面的
中,listen。
如何启用
ETag
和 lastmodified
xiaoliuliu2050的专栏
12-23
5854
开启
ETAG
全称EntityTags,HTTP协议规格说明中定义“
”为“被请求变量的实体值”。我们也可以把
理解为是一个客户端与服务器关联的记号。这个记号告诉客户端,当前网页在上次请求之后是否有发生变化,当发生变化时,
的值重新计算,并返回200状态码。如果没有变化,返回304状态码。从而不会重新加载整个页面信息。
以下会告诉你,
如何开启
步...
】探索在
使用过程中涉及到的缓存
Edidaughter的博客
11-20
245
1.浏览器缓存与
优点:
(1)使用有效缓存的时候,没有网络消耗,速度最快;
(2)缓存失效时,针对失效缓存使用的304响应使得网络流量消耗最小化.
缺点:
仅仅提升一个用户的体验.
...
正向代理的
和使用
热门推荐
qq_44659804的博客
02-12
(简易实现CDN功能)
HumorChen的博客
06-26
5204
环境推荐使用openresty,自带了挺多模块的,如果直接使用
,需要对缺少的模块进行添加,添加教程参照百度或者OpenResty教程
17 的博客
1953
大家好, 我是 17。和大家聊聊页面缓存
相关的
从入门到精通
04-25
是一个高性能的Web服务器和反向代理服务器。如果你想从入门到精通
,建议你首先
的基本概念和工作原理。然后你可以
如何
,如何优化
的性能,如何使用
作为反向代理服务器等等。在
的过程中,可以通过查看
官方文档、参考书籍及相关网络教程等途径来获得更全面的知识。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄9年
暂无认证
110
原创
6万+
周排名
126万+
总排名
52万+
访问
等级
5624
积分
73
粉丝
174
获赞
35
399
私信
热门文章
golang []byte和string相互转换
44553
Centos下GTK的安装与测试
21294
Freeradius配置文件radiusd.conf详解
20472
凯撒加解密算法C语言实现
18489
一个Lex/Yacc完整的示例(转)
16155
分类专栏
openresty
2篇
rsyslog
4篇
52篇
redmine
Xilinx
加密解密算法
6篇
Radius认证
网络编程
MySQL数据库
3篇
防火墙
1篇
GTK/QT
HTTPS
均衡负载
7篇
bleachbit
有意思的
数据结构和算法
火狐浏览器开发
curl
GO语言
9篇
python
Java
JNA
大数据
itchat
最新评论
解决 python3.7 无法使用ssl模块的问题
Jaesoon:
没有人发现没用吗?
std::string内存泄露问题之分析解决
Crawl.W:
对于c++11的std::string来说,初始分配的std::string是可以被释放的,就是对应该std::string str;执行memset不会造成内存泄露,源码没有看,希望哪个大佬搞清楚告诉一下。
也就是说std::string().swap(str)后,在执行memset是没有内存泄露的
python获取微信群成员信息
weixin_60265919:
现成的软件有么
nginx lua gzip解压缩INFLATE: Data error, no input bytes报错问题解决
maoguan121:
您好,能贴一下完整代码么
我这样编写完,发现 chrome 无法正常显示网页,但firefox却可以正常显示网页
linux使用openssl对socket通信加密
逆光倾城:
有没有考虑TCP拆包和粘包的情况?如何有效处理?
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
openrestry body_filter_by_lua_file无法建立TCP连接
爬取文章写入doc文件中
Rsyslog在日志切割后不再同步日志的问题
2021年
2020年
2019年
2018年
2017年
12篇
2016年
31篇
2015年
54篇
目录
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值