转载自:Nginx使用Expires增加浏览器缓存加速

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

Nginx中使用Expires增强浏览器缓存

能够使浏览器缓存的HTTP头部信息主要有以下三种:

1、last-modified实现浏览器缓存

last-modified是根据文件更新时间来确定是否再次发送加载。通过返回last-modified头部信息:

 
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
GET/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js HTTP/1.1
Host:www.3mc2.com
User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0
Accept:*/*
Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding:gzip,deflate
Referer:http://www.3mc2.com/category/architecture
Cookie:wp-settings-1=hidetb%3D0%26libraryContent%3Dbrowse%26align%3Dcenter%26urlbutton%3Dnone%26editor%3Dtinymce%26wplink%3D0%26ed_size%3D508%26mfold%3Do;wp-settings-time-1=1389840828
Connection:keep-alive
 
HTTP/1.1200OK
Server:nginx
Date:Thu,16Jan201415:47:24GMT
Content-Type:application/x-javascript
Last-Modified:Thu,16Jan201402:29:13GMT
Transfer-Encoding:chunked
Connection:keep-alive
Content-Encoding:gzip
 

再次请求则带有If-Modified-Since头部信息,并返回404:

 
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
GET/wp-includes/js/jquery/jquery.js?ver=1.10.2HTTP/1.1
Host:www.3mc2.com
User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0
Accept:*/*
Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding:gzip,deflate
Referer:http://www.3mc2.com/category/architecture/nginx
Connection:keep-alive
If-Modified-Since:Thu,16Jan201402:29:13GMT
 
HTTP/1.1304Not Modified
Server:nginx
Date:Thu,16Jan201415:53:34GMT
Last-Modified:Thu,16Jan201402:29:13GMT
Connection:keep-alive
 

我的测试环境为firefox,网址中带有”?ver=”参数的文件会再次发送请求(返回304),其他文件均未再次请求。

2、Etag确定浏览器缓存:

Etag的原理是将文件资源编号一个etag值,Response给访问者,访问者再次请求时,带着这个Etag值,与服务端所请求的文件的Etag对比,如果不同了就重新发送加载,如果相同,则返回304.

3、Expires浏览器缓存:

Expires是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。如果文件变动较频繁,不要使用Expires来缓存。

对于本博客来说,css样式和JS脚本基本已经定型,所以最适合的方法是Expires来缓存一些内容到访问者浏览器。通过配置Nginx配置文件实现相关功能:

 
0
1
2
3
4
5
6
7
8
9
10
11
12
13
 
server{
    .....
    root/www.3mc2.com;
    index  index.html index.htm index.php;
    location~.*\.(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf){
        expires15d;
    }
    location~.*\.(css|js){
        expires12h;
    }
    ......
}

Nginx使用Expires增加浏览器缓存加速(转)的更多相关文章

  1. Nginx使用Expires增加浏览器缓存加速

    Max-age是指我们的web中的文件被用户访问(请求)后的存活时间,是个相对的值,相对Request_time(请求时间). Expires它比max-age要麻烦点,Expires指定的时间分&q ...

  2. Nginx设置expires设定页面缓存时间 不缓存或一直使用缓存

    配置expires expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求 要配置expires,可以在http段中或者server段中或者location段中加入 l ...

  3. vue-cli 创建的项目,在 nginx 上配置启用浏览器缓存

    nginx 配置,关键参数: server { listen 80; server_name xxx.xxx.xxx.xxx; charset utf-8; root /home/xxx/dist/; ...

  4. nginx优化:使用expires在浏览器端缓存静态文件

    一,nginx中expires指令的作用 网站的图片等静态文件一旦发布,通常很少改动, 为了减小对服务器请求的压力,提高用户浏览速度, 我们可以设置nginx中的expires, 使用户访问一次后,将 ...

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

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

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

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

  7. 浏览器缓存相关的Http头介绍:Expires,Cache-Control,Last-Modified,ETag

    转自:http://www.path8.net/tn/archives/2745 缓存对于web开发有重要作用,尤其是大负荷web系统开发中. 缓存分很多种:服务器缓存,第三方缓存,浏览器缓存等.其中 ...

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

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

  9. 浏览器缓存之Expires Etag Last-Modified max-age详解

    前段时间去面试移动端的H5开发工程师,在最后面试的时候被问到了max-age Expires Etag有什么不同,在什么情况下应用,当时乱编了一通,自我感觉良好,结果…… 大家懂得,现在讲他们几个的区 ...

随机推荐

  1. [VBS脚本]定时提示并关闭计算机

    一.Natalia.bat 双击这个文件可以运行Natalia 控制台在打开后会变成最小化,标题为PowerAssistant,黑色背景淡绿色文字 运行脚本Natalia.vbs @ECHO OFF ...

  2. Gerrit的使用

    为什么要使用Gerrit? 最先接触Gerrit时是Android开发过程中,提交代码给负责人审核时,用到的一款软件.它就是一款代码审核的工具.(向Git代码库推送push代码时,必须要经过Gerri ...

  3. Ubuntu下配置L2TP

    发现PPTP已经不可用了,不知是不是又被墙了.只能尝试L2TP了. Ubuntu可视化配置界面network-manager默认是没有L2TP配置选项的,需要安装第三方插件软件: sudo apt-a ...

  4. Ubuntu上如何卸载Vmware产品

    每次升级完Kernel之后启动Vmplayer都需要重新编译一些模块,经常出现编译失败的情况,为了重新安装程序,得先卸载掉之前已安装的. 首先,执行如下命令确认正在运行的产品名称(如Workstati ...

  5. Java垃圾回收小结

    一.如何确定某个对象是“垃圾”? 首先要搞清一个最基本的问题:如果确定某个对象是“垃圾”?既然垃圾收集器的任务是回收垃圾对象所占的空间供新的对象使用,那么垃圾收集器如何确定某个对象是“垃圾”?—即通过 ...

  6. opengles2.0之图元装配和光栅化

    光栅化的过程就是把三维世界中的物体转换成屏幕上像素的过程. glGetfloatv();    --------v表示的是数组 gles2.0里面有两种绘图命令.glDrawArrays和glDraw ...

  7. 使用页面Tag判断某个值为空值时,不能使用logic:equal(无效),可以使用logic:notPresent

    使用页面Tag判断某个值为空值时,不能使用logic:equal(无效),可以使用logic:notPresent

  8. DNS主从服务,子域授权,view视图,日志系统,压力测试

    DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...

  9. mongoDB研究笔记:复制集数据同步机制

    http://www.cnblogs.com/guoyuanwei/p/3279572.html  概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之一数据同步是如何实现的?带着这个问题 ...

  10. C#函数式编程之递归调用

    关于递归相信大家已经熟悉的不能再熟悉了,所以笔者在这里就不多费口舌,不懂的读者们可以在博客园中找到很多与之相关的博客.下面我们直接切入正题,开始介绍尾递归. 尾递归 普通递归和尾递归如果仅仅只是从代码 ...