首页 运维 nginx 基于nginx如何设置浏览器协商缓存

基于nginx如何设置浏览器协商缓存

May 15, 2023 pm 10:07 PM
nginx

强缓存与协商缓存的区别

  强缓存:浏览器不与服务端协商直接取浏览器缓存

  协商缓存:浏览器会先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源

协商缓存运作原理

  现在有一个这样的业务情景:后端的静态资源会不定时地发生更新,而因为浏览器默认使用强缓存,会默认从浏览器缓存中取到过时的资源。

  现在我们希望浏览器每次获取资源的时候都向后端确认资源是否更新,就要设置浏览器使用协商缓存

  那么后端如何判断资源是否更新了呢?这时就要用到etag和last-modified两项响应头。

  每次收到一个静态资源的请求时,后端都将资源的最后修改时间(last-modified)、根据资源内容计算出来的etag放在响应头给前端。

  前端收到响应后将这两项缓存起来,然后在下次请求同样资源的时候,将这两项的内容放到if-modified-since和if-none-match这两项请求头中。

  服务端收到这两项后,会与资源当前生成的etag和last-modified做比较,如果两者都一致,说明资源没有更新,服务端会返回304空响应;否则,说明资源有更新,服务端会将完整的资源内容返回

实现

  那么如何实现这样一个复杂的过程呢?其实很简单,只要使用nginx作为静态资源的服务器,再在响应头加上cache-control:no-cache就可以了。

  下面来分步骤实现一下

  1. 使用nginx作为静态资源的服务器

    在nginx的配置中,将对静态资源的请求映射到资源的磁盘路径上

http {
  server {
  listen 80;
  ...
  location /picture/ {
    alias d:/luozixi/tcp_test/picture/;
    # alias是重定义路径
    # 比如访问127.0.0.1/picture/1_new.gif,则会映射为访问d:/luozixi/tcp_test/picture/1_new.gif
    # web应用根本不会收到请求,picture的请求都被nginx处理了
    # alias是替换,root是拼接
    autoindex on;
    # 访问127.0.0.1/picture/,会得到目录的索引界面
    }
  }
}
登录后复制

  2. 重新加载nginx配置

nginx -s reload
登录后复制

  3. 此时,请求静态资源的时候nginx会自动在response头中加上etag和last-modified两项

  基于nginx如何设置浏览器协商缓存

  4. 但是这时发现,如果不配置cache-contrl: no-cache,浏览器在下次请求这个资源的时候不会将请求发向后端,而是直接从缓存中获取资源

  5. 在nginx中配置

location /picture/ { 
  add_header cache-control no-cache;
  alias d:/luozixi/tcp_test/picture/; 
}
登录后复制

  6.清除浏览器缓存后第一次发起请求,会得到一个正常的200 response,而且响应头里已经有了cache-control: no-cache,表示使用协商缓存

  7.再次发起请求后,会发现请求头已经带上了if-modified-since和if-none-match两项

  基于nginx如何设置浏览器协商缓存

  8.服务端(nginx)收到这两项后,会与资源当前生成的etag和last-modified做比较,如果两者都一致,说明资源没有更新,服务端会返回304空响应;否则,说明资源有更新,服务端会将完整的资源内容返回

    另外,服务器验证if-modified-since的方式只是简单的字符串比较,即使资源的last-modified比if-modified-since要早,服务端仍认为资源有更新

  9.浏览器在收到304响应后,会从浏览器缓存中取资源。因此速度非常块

  基于nginx如何设置浏览器协商缓存

no-cache与no-store的区别

  no-cache表示不缓存过期资源,缓存会向服务器进行有效处理确认之后处理资源

  而no-store才是真正的不进行缓存。

以上是基于nginx如何设置浏览器协商缓存的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

tomcat服务器怎么让外网访问 tomcat服务器怎么让外网访问 Apr 21, 2024 am 07:22 AM

要让 Tomcat 服务器对外网访问,需要:修改 Tomcat 配置文件,允许外部连接。添加防火墙规则,允许访问 Tomcat 服务器端口。创建 DNS 记录,将域名指向 Tomcat 服务器公有 IP。可选:使用反向代理提升安全性和性能。可选:设置 HTTPS 以提高安全性。

thinkphp怎么运行 thinkphp怎么运行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本地运行步骤:下载并解压 ThinkPHP Framework 到本地目录。创建虚拟主机(可选),指向 ThinkPHP 根目录。配置数据库连接参数。启动 Web 服务器。初始化 ThinkPHP 应用程序。访问 ThinkPHP 应用程序 URL 运行。

Welcome to nginx!怎么解决? Welcome to nginx!怎么解决? Apr 17, 2024 am 05:12 AM

要解决 "Welcome to nginx!" 错误,需要检查虚拟主机配置,启用虚拟主机,重新加载 Nginx,如果无法找到虚拟主机配置文件,则创建默认页面并重新加载 Nginx,这样错误消息将消失,网站将正常显示。

docker容器之间如何通信 docker容器之间如何通信 Apr 07, 2024 pm 06:24 PM

Docker 环境中容器通信有五种方法:共享网络、Docker Compose、网络代理、共享卷、消息队列。根据隔离性和安全性需求,选择最合适的通信方法,例如利用 Docker Compose 简化连接或使用网络代理提高隔离性。

nodejs项目怎么部署到服务器 nodejs项目怎么部署到服务器 Apr 21, 2024 am 04:40 AM

Node.js 项目的服务器部署步骤:准备部署环境:获取服务器访问权限、安装 Node.js、设置 Git 存储库。构建应用程序:使用 npm run build 生成可部署代码和依赖项。上传代码到服务器:通过 Git 或文件传输协议。安装依赖项:SSH 登录服务器并使用 npm install 安装应用程序依赖项。启动应用程序:使用 node index.js 等命令启动应用程序,或使用 pm2 等进程管理器。配置反向代理(可选):使用 Nginx 或 Apache 等反向代理路由流量到应用程

html文件怎么生成网址 html文件怎么生成网址 Apr 21, 2024 pm 12:57 PM

要将 HTML 文件转换为网址,需要使用网络服务器,包括以下步骤:获取网络服务器。设置网络服务器。上传 HTML 文件。创建域名。路由请求。

phpmyadmin安装失败怎么办 phpmyadmin安装失败怎么办 Apr 07, 2024 pm 03:15 PM

phpMyAdmin 安装失败的故障排除步骤:检查系统要求(PHP 版本、MySQL 版本、Web 服务器);启用 PHP 扩展(mysqli、pdo_mysql、mbstring、token_get_all);检查配置文件设置(主机、端口、用户名、密码);检查文件权限(目录所有权、文件权限);检查防火墙设置(白名单 Web 服务器端口);查看错误日志(/var/log/apache2/error.log 或 /var/log/nginx/error.log);寻求技术支持(phpMyAdmin

dockerfile中最常见的指令是什么 dockerfile中最常见的指令是什么 Apr 07, 2024 pm 07:21 PM

Dockerfile 中最常用的指令有:FROM:创建新镜像或派生新镜像RUN:执行命令(安装软件、配置系统)COPY:复制本地文件到镜像ADD:类似 COPY,可自动解压缩 tar 存档或获取 URL 文件CMD:指定容器启动时的命令EXPOSE:声明容器监听端口(但不公开)ENV:设置环境变量VOLUME:挂载主机目录或匿名卷WORKDIR:设置容器中的工作目录ENTRYPOINT:指定容器启动时要执行的可执行文件(类似 CMD,但不可覆盖)

See all articles