Nginx与浏览器缓存

一、浏览器对缓存的处理:Internet选项

  ★ 控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思。

    ★ 检查存储的页面较新版本

  1.每次访问网页时
                不管是否有缓存、资源状态是否过期,都会再次请求服务器。
         2.每次启动Internet Explorer时
           不管是否有缓存、资源状态是否过期,都会再次请求服务器。
         3.自动
                大体上和2是一样的,只是对于图片的策略有点不同。
         4.从不
                完全按照资源的缓存策略来请求服务器。

  ★ F5 刷新:请求服务端,但是会根据和服务器对比文件来确定是否下载
  ★ Ctrl + F5刷新:一定会去服务器下载。

二、缓存控制策略

  ★Last-Modified/If-Modified-Since要配合Cache-Control使用,Etag/If-None-Match也要配合Cache-Control使用。

    ps: 分布式系统里多台机器间文件的last-modified必须保持一致,以免负载均衡到不同机器导致比对失败
       分布式系统尽量关闭掉Etag(每台机器生成的etag都会不一样)

  ★HTML通过meta的http-equiv属性控制浏览器缓存策略:通过设置Pragma和Cache-control和expires控制
    ps:只能控制html的缓存策略,不能控制css/js/图片的缓存策略。

    Cache-control的max-age和expires同时存在,那么先处理max-age。
    Cache-control指定了no-cache后,max-age和expires。
    Pragma: http 1.0 IE浏览器才识别,请求头中不会体现,但是确实有效果
    Cache-control: http 1.1

三、Nginx设置浏览器缓存

★Nginx设置浏览器缓存:可以在http 、server、location节点中添加。可以设置各种资源的缓存策略,不仅仅是HTML。而<meta http-equiv>节点只针对HTML

  #add_header Cache-Control no-cache;
  #add_header Cache-Control private;
  add_header Cache-Control max-age=7200;

  if ($request_filename ~* ^.*?\.(ico|jpeg|gif|jpg|png|woff)$){

    expires 7d;
  }
  if ($request_filename ~* ^.*?\.(js|css)$){

    expires 7d;
  }
  if ($request_filename ~* ^.*?\.(html|htm)$){

    expires 3d;
  }

  ★Nginx中的配置会覆盖HTML的http-equiv="Cache-control"配置。

   但是如果HTML中的加了下面3个标签,浏览器端效果还是只能no-cache(从效果上来看:Nginx的Cache-control配置无效)
          因为Nginx的Cache-control配置只是覆盖了Cache-control(如果html加的是后面两个标签,Nginx还是有效的),而Pragma仍然起着作用。

    <meta http-equiv="Pragma" content="no-cache"/>
    <meta http-equiv="Cache-control" content="no-cache;max-age=0"/>
    <meta http-equiv="expires" content="0"/>

Nginx与浏览器缓存的更多相关文章

  1. nginx,控浏览器缓存,前端优化方案

    1,困惑 做web项目,对于开发者来说,一个最头痛的问题就是浏览器缓存,有缓存,js更改了,html更改了,发布服务器以后用户往往无法通过浏览器访问到最新的类容,需要用户主动去刷新页面, 因为一直做企 ...

  2. nginx 与 浏览器缓存

    一.本地静态文件 location /html/{ rewrite ^(html/.*)$ /$1 break; root /data/static; expires 12h; etag off; i ...

  3. Nginx 决策浏览器缓存是否有效

    expires指令是告诉浏览器过期时间 syntax:expires [modified] time; eopch | max | off; default : off context :http,s ...

  4. # Nginx设置浏览器缓存

    配置语法 在location或if段里,来写. 格式 expires 30s; expires 30m; expires 2h; expires 30d; (注意:服务器的日期要准确,如果服务器的日期 ...

  5. nginx 禁止浏览器缓存

    如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制. location /{ expires 1s; } 如果Get页面未做任何修改,服务器就是对客户端返回304 Not ...

  6. Nginx实践篇(2)- Nginx作为静态资源web服务 - 控制浏览器缓存、防盗链

    一.控制浏览器缓存 1. 浏览器缓存简介 浏览器缓存遵循HTTP协议定义的缓存机制(如:Expires;Cache-control等). 当浏览器无缓存时,请求响应流程 当浏览器有缓存时,请求响应流程 ...

  7. Nginx使用Expires增加浏览器缓存加速(转)

    转载自:Nginx使用Expires增加浏览器缓存加速 Nginx可以更改HTTP头部,这个是Web服务器必须的,当然Nginx更可以支持在HTTP头部中添加Expires等相关信息,增强浏览器缓存, ...

  8. 【nginx网站性能优化篇(1)】gzip压缩与expire浏览器缓存

    gzip压缩 概述 网页在服务器端经过了gzip或者其他格式的压缩后的输出明显减少了content-length字节,当访问过百万时,这些减少的字节就会变为客观的流量给节约下来;从而减轻服务器的压力以 ...

  9. nginx优化--gzip压缩与expire浏览器缓存

    gzip压缩 概述 网页在服务器端经过了gzip或者其他格式的压缩后的输出明显减少了content-length字节,当访问过百万时,这些减少的字节就会变为客观的流量给节约下来;从而减轻服务器的压力以 ...

随机推荐

  1. angular2.0入门---webStorm创建angular CLI项目

    创建项目之前需要先安装angular cli,(angular是用typescript编写的,所以先安装typescript,再安装angularjs-cli).打开命令窗口输入 npm instal ...

  2. <VS2010>混合模式程序集是针对“v2.0”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

    在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0时,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有 ...

  3. elixir 关键字列表

    关键字列表 元组列表 每个元素第一个为原子时候 称为关键字列表 iex(7)> list = [{:d, 1}, {:s, 2},{:h, 3}][d: 1, s: 2, h: 3]iex(8) ...

  4. git 上传文件到仓库上提示:origin does not to be a git repository

    最近上传代码到GitHub的时候,当我输入 git push -u origin master的时候,它提示: origin does not to be a git repository 在网上找到 ...

  5. 612.1.003 ALGS4 | Stacks and Queues

    Algorithm | Coursera - by Robert Sedgewick Type the code one by one! 不要拜读--只写最有感触的!而不是仅仅做一个笔记摘录员,那样毫 ...

  6. oracle 网络配置 及 pl/sql 连接配置

    oracle网络配置有三个文件,它们都在D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 这个文件夹下面,有sqlnet.ora.l ...

  7. Object 类型

    Object 类型 ECMAScript中大多数的引用类型都值都是Object类型的实例,Object也是使用最多的一个类型,主要用来在程序中存储和传输数据 创建Object实例的两种方式 使用new ...

  8. Linux下卸载安装mysql

    1.卸载命令:# rpm -qa |grep -i mysql # yum remove mysql-community mysql-community-server mysql-community- ...

  9. [翻译] BAFluidView

    BAFluidView https://github.com/antiguab/BAFluidView This view and it's layer create a 2D fluid anima ...

  10. Linux rpm命令详解

    rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采用.RPM ...