在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。 准备 要学习本教程,您需要: 一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。...通过适当地命名文件,我们可以欺骗Nginx,例如,一个完全空的文件是一个图像而另一个是样式表。 使用truncate创建test.html在默认Nginx目录中命名的文件。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),则会将ETag值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...确保更改此命令中的ETag值以匹配先前输出中的ETag值。...头模块是核心Nginx模块,这意味着它不需要单独安装即可使用。 要添加标题模块,请在vi或您喜欢的文本编辑器中打开默认服务器块Nginx配置文件。
在本教程中,我们将了解如何使用Nginx的头模块来实现浏览器缓存。 准备 要学习本教程,您需要: 一台已经设置好可以使用sudo权限的非root账号的Ubuntu 16.04服务器,并且已开启防火墙。...没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 在服务器上安装Nginx。 除了头模块,我们还将在本文中使用Nginx的地图模块。...使用Web浏览器时,如果浏览器想要再次请求相同的文件(例如,刷新页面时),ETag则会将值存储并发送回带有If-None-Match请求标头的服务器。 我们可以使用以下命令在命令行上模拟它。...确保更改ETag命令中的值以匹配先前输出中的值ETag。...头模块是核心Nginx模块,这意味着它不需要单独安装即可使用。 要添加标题模块,请用您喜欢的文本编辑器中打开在nano中的默认的Nginx配置文件。
[TOC] 0x00 前言简述 0x01 网页性能优化关键点 数据缓存 描述: 当我们访问某一个网页时浏览器第一次加载网页时,会将页面资源存储在 HTTP缓存中。...通常 cache-control 被认为是一种比 expires(到期) 更现代,更灵活的方法,但是两个标头可以同时使用。 Q: 如何进行缓存?...答: 通过标识资源或资源类型(例如图像或CSS文件),然后使用所需的缓存选项指定资源的标头,来启用缓存。...---- (1) 缓存控制 Tips : Cache-Control除了在响应中使用,在请求中也可以使用 1.用开发者工具来模拟下请求时带上Cache-Control:勾选Disable cache,刷新页面...使用更新且更灵活的高速缓存控制标头expires标头通常用作备用。 Tips : Pragma 是旧产物,已经逐步抛弃,有些网站为了向下兼容还保留了这两个字段。
命令简介 curl 命令使用 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP或FILE支持的协议之一,将数据传输到网络服务器或从网络服务器传输数据...它非常适合在 Shell 脚本中使用。 curl 命令提供代理支持,用户身份验证,FTP 上传,HTTP 发布,SSL 连接,cookie,文件传输恢复,metalink 和其他功能。...选项说明 -A #用户代理 -b #发送 Cookie 信息 -c #将 Cookie 写入文件 -d #发送 POST 请求的数据体 -e #设置 HTTP 的标头 Referer 字段 -...F #向服务器上传文件 -G #构造 URL 的查询字符串 -H #添加 HTTP 请求的标头 -i #打印服务器回应的 HTTP 标头 -I 打印服务器回应的 HEAD 标头 -k #跳过.../2.4.6 (CentOS) Last-Modified: Wed, 10 Mar 2021 17:03:20 GMT ETag: "17-5bd31a4e35769" Accept-Ranges:
如果页面没有发生变化时,头信息应该如下: ? 在我们与技术沟通配置ETag时,需要通过此种方式进行验证。...一、Apache Apache根据配置文件中的配置来设置Etag值,默认的Apache的FileEtag设置为: FileEtagINode Mtime Size 也就是根据这三个属性来生成Etag...以覆盖默认的Innode MTime Size的ETag,因为默认的ETag使用到的Innode会导致相同的文件在分布式服务器上产生的ETag不同。...确认没有使用ngx_headers_more清除ETag头:同样在配置文件中不能出现如下语句的任意一句,如果出现请将其删除。 ? 重新启动Nginx,就启用ETag功能了。...步骤4 请关闭gzip,即将上一步中的gzipon;改为gzip off;然后去步骤2。 若不想关闭gzip,并要开启ETag,同时仍要坚持使用当前的Nginx版本,只能修改源码并重新编译。
1、缓存的分类 缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。...2.2.2 几个重要概念解释 Expires策略:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。...web服务器在响应请求时,告诉浏览器资源的最后修改时间。...Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。...Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
Apache从ProxyPass“解析”提取主机值,因此我们可以发送类似GET @evil.com HTTP/1.1的请求,Apache将其视为http://backend_server@evil.com...滥用标头修改功能 对于反向代理服务器来说,增添,删除和修改后端请求中的标头是一项基本功能。有些情况在,这比修改后端本身简单的多。有时,反向代理会添加一些重要的安全标头。...一般来说,反向代理服务器会使用缓存标志,该标志与请求的主机头值和路径相关联。 反向代理对某个响应缓存与否,它会先检查请求中的Cache-Control和Set-Cookie标头。...Nginx发现请求中存在/image,于是直接转发该请求值Tomcat,然后缓存响应(Tomcat->Nginx,此时Cache-Control标头无效)。...Tomcat在处理时将甄别出/index.jsp,因此攻击者可以强制Nginx缓存任何页面,攻击者仅需更改路径/images/..
2、Web Server发送完Last-Modified/Etag头给客户端后,客户端会缓存这些头; 3、客户端再次发起相同页面的请求时,将分别发送与Last-Modified/Etag对应的Http...A、Expires A.1、Apache Etag 使用Apache的mod_expires 模块来设置,这包括控制应答时的Expires头内容和Cache-Control头的max-age指令 ExpiresActive...其他请参考Nginx中Expires B.1、Apache中Etag设置 在Apache中设置Etag的支持比较简单,只用在含有静态文件的目录中建立一个文件.htaccess, 里面加入: FileETag...MTime Size 这样就行了,详细的可以参考Apache的FileEtag文档页 B.2、Lighttpd Etag 在Lighttpd中设置Etag支持: etag.use-inode: 是否使用...的功能 第四个参数肯定是要enable的, 前面三个就看实际的需要来选吧,推荐使用修改时间 B.3、 Nginx Etag Nginx中默认没有添加对Etag标识.Igor Sysoev的观点”在对静态文件处理上看不出如何
由此可知,跨域仅限于浏览器中,是由于浏览器对不同源数据的拦截产生的,跨域有时候是不可避免的,我们需要采取措施实现跨域请求。 ? ?...3.1 被调用方解决 被调用方支持跨域解决思路:基于http协议关于跨域方面的要求而做的修改,从a域名调用b域名时,在b域名返回的信息里加些字段,告诉浏览器b允许a调用。...然后配置虚拟主机,打开nginx的目录,打开conf文件下的nginx.conf文件, 在最后添加 include vhost/*.conf; ?...最后输入 nginx -s stop 停止 nginx 3.1.3 apache解决方案 首先打开 apache目下的 conf/httpd.conf 文件,...3.1.4 spring框架解决方案 在类或者方法上添加注解 @CrossOrigin 3.2 调用方解决 调用方隐藏跨域解决思路:当域名不是自己公司的时,可以用此方法解决。
在程序中加入HTTP头推送操作,Last-Modified时间是27号,当前时间是28号,我们要让Last-Modified 小于当前时间才行。...最终在一个外国网站是找到一个nginx-static-etags模块,有兴趣自己尝试,这里就不讲了。 3.1....9.1. json 当用户请求json地址时,我们将 json 数据附加HTTP头(Cache-Control, Expires, ETag),然后返回给用户,用户的设备会遵循HTTP的声明,进行缓存操作...测试总结 Apache HTTPD 最完善 Lighttpd 其次, Nignx仍在快速发展中,Nignx每个版本差异很大,对HTTP协议实现标准也不太严谨,因为Nignx在大陆是趋势,所以下面给出的例子都是...我习惯使用yum 安装 nginx 随时 yum update 升级。
Nginx:在 Nginx 配置文件中使用 gzip 或 brotli 指令启用压缩并指定设置。...02)、缓存控制和 ETag 标头 用于控制浏览器缓存的两个重要标头是 Cache-Control 和 ETag。...例如,可以使用 Cache-Control:public, max-age=3600 表示资源可以缓存一小时。 ETag 标头为特定版本的资源提供唯一标识符(通常是哈希)。...当浏览器请求资源时,它会发送缓存中的 ETag 值。如果服务器的 ETag 值与浏览器发送的值匹配,则服务器响应 304 Not Modified 状态,浏览器使用缓存的版本。...例如,在 Apache 服务器中,您可以使用 .htaccess 文件来设置缓存标头: 此配置为 CSS、JS、JPG 和 PNG 文件设置 Cache-Control 标头,允许它们缓存 24 小时。
如果 Etag 标头是资源响应的一部分,则客户端可以在未来请求的标头中发出 If-None-Match,以验证缓存的资源。...Wiki 页面(发布数据)时,POST 请求将包含 If-Match 标头,其中包含 Etag 值以检查有效性。...,这个标头用来响应预检请求,它发出实际请求时可以使用哪些HTTP标头。...浏览器在发出预检请求时使用 Access-Control-Request-Headers 请求标头,使服务器知道在发出实际请求时客户端可能发送的 HTTP 标头。...比较两个资源是否时相同的版本有些复杂,根据上下文,有两种相等性检查 当期望的是字节对字节进行比较时,例如在恢复下载时,使用强 Etag进行验证 当用户代理需要比较两个资源是否具有相同的内容时,使用若 Etag
如果是图片是程序生成的,我们可以用 no-cache 这些 header 来控制,但如果这些图片是 apache 或 nginx 等呢?...下面开始介绍 Etag: Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串...:max-age和Expires时,会同时使用,也就是说在完全匹配If-Modified-Since和If-None-Match即检查完修改时间和Etag之后,服务器才能返回304....下面是在Apache中的Etag的配置 在Apache中设置Etag的支持比较简单,只需要在apache的配置中加入下面的内容就可以了: FileETag MTime Size 注解:FileETag指令配置了当文档是基于一个文件时用以创建...ETag头 在大型多WEB集群时,使用ETag时有问题,所以有人建议使用WEB集群时不要使用ETag,其实很好解决, 因为多服务器时,INode不一样,所以不同的服务器生成的ETag不一样,所以用户有可能重复下载
什么是新鲜的数据 一旦资源存储在缓存中,理论上就可以永远被缓存使用。...如果 Etag 标头是资源响应的一部分,则客户端可以在未来请求的标头中发出 If-None-Match,以验证缓存的资源。...,这个标头用来响应预检请求,它发出实际请求时可以使用哪些HTTP标头。...浏览器在发出预检请求时使用 Access-Control-Request-Headers 请求标头,使服务器知道在发出实际请求时客户端可能发送的 HTTP 标头。...比较两个资源是否时相同的版本有些复杂,根据上下文,有两种相等性检查 当期望的是字节对字节进行比较时,例如在恢复下载时,使用强 Etag进行验证 当用户代理需要比较两个资源是否具有相同的内容时,使用若 Etag
Expires 或 max-age 在 HTTP/1.0 中,新鲜度过去由 Expires 标头指定。 Expires 标头使用明确的时间而不是通过指定经过的时间来指定缓存的生命周期。...为了解决这些问题,ETag 响应标头被标准化作为替代方案。 ETag/If-None-Match ETag 响应标头的值是服务器生成的任意值。...备注: 在评估如何使用 ETag 和 Last-Modified 时,请考虑以下几点:在缓存重新验证期间,如果 ETag 和 Last-Modified 都存在,则 ETag 优先。...public 值具有使响应可存储的效果,即使存在 Authorization 标头。 备注: 只有在设置了 Authorization 标头时需要存储响应时才应使用 public 指令。...标头,以便在重新加载时不必重新传输资源。
尽管通用标头不会限定于是请求还是响应报文,但是某些通用标头大部分或全部用于一种特定类型的请求中。也就是说,如果某个通用标头出现在请求报文中,那么大部分通用标头都会显示在该请求报文中。...这个标头中可以出现许多单独的指令,其详细信息可以在 RFC 2616 中找到,即使这是常规标头,某些指令也只能出现在请求或响应中。...下表提供了一个 Cache-Control 选项的总结并告诉你如何去使用 “请注意,在 Cache-Control 标头中只能出现一个指令,但是在消息中可以出现多个这样的标头。 ?...,使用bytes 来指定 当服务器不能处理客户端发来的请求时,使用 none 来指定 Accept-Ranges: bytes Accept-Ranges: none Age Age HTTP 响应标头告诉客户端源服务器在多久之前创建了响应...例如下面这种写法 Server: Apache/2.4.1 (Unix) Vary Vary HTTP 响应标头确定如何匹配请求标头,以决定是否可以使用缓存的响应,而不是从原始服务器请求一个新的响应。
在使用 GET 条件请求时,从源服务器刷新内容。...; 此示例 X-Cache-Status 在响应客户端时添加 HTTP 标头。...Nginx 使用 ETag 标头 在 Nginx 1.7.3 及更高版本中,ETag 标头完全支持 If-None-Match。...HTTP 标头的 stale-if-error 扩展 Cache-Control 允许在发生错误时使用陈旧的缓存响应。...这些头具有比较低优先级, proxy_cache_use_stale 指令如上所述。 Nginx 是否支持 Vary 标头 Nginx 1.7.7 以及更高版本中是支持 Vary 标头的 。
策略 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。...web服务器在响应请求时,告诉浏览器资源的最后修改时间。 ...• Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。...Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。 ...HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题: • Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话
领取专属 10元无门槛券
手把手带您无忧上云