• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!

如何设置静态内容缓存时间?

2015-09-09 23:57:10   来源:叶景网络
    我们的网站中往往包含大量的页面组件,比如图片、样式表文件、JS脚本文件和Flash动画。这些组件的变化频率非常低,尤其是那些构成网站基本框架的组件, 几乎不会发生变化。我们可以将这些变化率很低的组件看作静态内容,并且通过max-age或expires标识设置缓存过期的时间,以便下次更快的访问,节约带宽资源,节省服务器资源、提高用户体验等。
    apache配置:
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/gif A2592000
    ExpiresByType image/jpeg A2592000
    ExpiresByType image/png A2592000
    ExpiresByType image/x-icon A2592000
    ExpiresByType application/x-javascript A604800
    ExpiresByType text/css A604800
    </IfModule>
    或者
    <ifmodule mod_expires.c>
    <filesmatch "\.(jpg|gif|png|css|js)$">
    ExpiresActive on
    ExpiresDefault "access plus 600 minutes"
    </filesmatch>
    </ifmodule>
    可以选用的时间参数有years months weeks days hours minutes seconds
    也可以加在.htaccess文件:
    #Expire Header
    <FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
    ExpiresDefault "access plus 2 hours"
    </FilesMatch>
    or
    # Expire images header
    ExpiresActive On
    ExpiresDefault A0
    ExpiresByType image/gif A2592000
    ExpiresByType image/png A2592000
    ExpiresByType image/jpg A2592000
    ExpiresByType image/jpeg A2592000
    ExpiresByType image/ico A2592000
    ExpiresByType text/css A2592000
    ExpiresByType text/javascript A2592000
    #A2592000 means 1 month in the future (60*60*24*30=2592000)
    nginx配置:
    location ~*     .+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js|flv|mp3|wma|wmv|ram|rm)$ {
    valid_referers none blocked *.http://www.cngxit.com/;
    if ($invalid_referer) {
    #rewrite     / http://www.cngxit.com/ static/logo.png;
    #return 412;
    return 403;
    }
    access_log off;
    root /opt/www;
    expires 10h;
    break; 
    }
    或者 
    location ~ \.(gif|jpg|png|swf|flv|bmp)$ {
    valid_referers none blocked *.http://www.cngxit.com/;
    if ($invalid_referer) {
    #rewrite     / http://www.cngxit.com/ static/logo.png;
    return 403;
    }
    expires 30d;
    }
    location ~ .*\.(js|css)?$
    {
    expires 3d;
    } 
    测试:
    curl -I http://www.cngxit.com/ static/logo.png
    HTTP/1.1 200 OK
    Server: Apache/2.0.63
    Date: Tue, 21 Jun 2011 08:13:06 GMT
    Content-Type: image/gif
    Content-Length: 21734
    Last-Modified: Tue, 21 Jun 2011 08:11:00 GMT
    Connection: keep-alive
    Expires: Thu, 21 Jul 2011 08:13:06 GMT
    Cache-Control: max-age=2592000
    Accept-Ranges: bytes
    Etag和Expires的工作原理
    在客户端通过浏览器发出第一次请求某一个URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应同时记录相关属性标记(Http Reponse Header),服务器端的返回状态会是200,格式类似如下:
    HTTP/1.1 200 OK
    Date: Tue, 03 Mar 2009 04:58:40 GMT
    Content-Type: image/jpeg
    Content-Length: 83185
    Last-Modified: Tue, 24 Feb 2009 08:01:04 GMT
    Cache-Control: max-age=2592000
    Expires: Thu, 02 Apr 2009 05:14:08 GMT
    Etag: “5d8c72a5edda8d6a:3239″
    客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应并记录相关记录属性标记文件没有发生改动,服务器端返回304,直接从缓存中读取:
    HTTP/1.x 304 Not Modified
    Date: Tue, 03 Mar 2009 05:03:56 GMT
    Content-Type: image/jpeg
    Content-Length: 83185
    Last-Modified: Tue, 24 Feb 2009 08:01:04 GMT
    Cache-Control: max-age=2592000
    Expires: Thu, 02 Apr 2009 05:14:08 GMT
    Etag: “5d8c72a5edda8d6a:3239″
    其中Last-Modified、Expires和Etag是标记页面缓存标识
    一、Last-Modified、Expires和Etag相关工作原理
    1、Last-Modified
    在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(Http Reponse Header)此文件在服务期端最后被修改的时间,格式类似这样:
    Last-Modified: Tue, 24 Feb 2009 08:01:04 GMT
    客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头(Http Request Header),询问该时间之后文件是否有被修改过:
    If-Modified-Since: Tue, 24 Feb 2009 08:01:04 GMT
    如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
    注:如果If-Modified-Since的时间比服务器当前时间(当前的请求时间request_time)还晚,会认为是个非法请求
    2、Etag工作原理
    HTTP 协议规格说明定义ETag为“被请求变量的实体标记”。简单点即服务器响应时给请求URL标记,并在HTTP响应头中将其传送到客户端,类似服务器端返回的格式:
    Etag: “5d8c72a5edda8d6a:3239″
    客户端的查询更新格式是这样的:
    If-None-Match: “5d8c72a5edda8d6a:3239″
    如果ETag没改变,则返回状态304。
    即:在客户端发出请求后,Http Reponse Header中包含 Etag: “5d8c72a5edda8d6a:3239″
    标识,等于告诉Client端,你拿到的这个的资源有表示ID:5d8c72a5edda8d6a:3239。当下次需要发Request索要同一个URI的时候,浏览器同时发出一个If-None-Match报头( Http Request Header)此时包头中信息包含上次访问得到的Etag: “5d8c72a5edda8d6a:3239″标识。
    If-None-Match: “5d8c72a5edda8d6a:3239“
    ,这样,Client端等于Cache了两份,服务器端就会比对2者的etag。如果If-None-Match为False,不返回200,返回304 (Not Modified) Response。
    3、Expires
    给出的日期/时间后,被响应认为是过时。如Expires: Thu, 02 Apr 2009 05:14:08 GMT
    需和Last-Modified结合使用。用于控制请求文件的有效时间,当请求数据在有效期内时客户端浏览器从缓存请求数据而不是服务器端. 当缓存中数据失效或过期,才决定从服务器更新数据。
    4、Last-Modified和Expires
    Last-Modified标识能够节省一点带宽,但是还是逃不掉发一个HTTP请求出去,而且要和Expires一起用。而Expires标识却使得浏览器干脆连HTTP请求都不用发,比如当用户F5或者点击Refresh按钮的时候就算对于有Expires的URI,一样也会发一个HTTP请求出去,所以,Last-Modified还是要用的,而 且要和Expires一起用。
    5、Etag和Expires
    如果服务器端同时设置了Etag和Expires时,Etag原理同样,即与Last-Modified/Etag对应的Http Request Header:If-Modified-Since和If-None-Match。我们可以看到这两个Header的值和Web Server发出的Last-Modified,Etag值完全一样;在完全匹配If-Modified-Since和If-None-Match即检查完修改时间和Etag之后,服务器才能返回304.
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
windows及linux服务器301重定向实现方法 windows及linux服务
如何设置静态内容缓存时间? 如何设置静态内容缓
阿里云系统 Apache 开启GZIP 阿里云系统 Apache
LNMP一键安装卡在Starting php-fpm解决办法 LNMP一键安装卡在St
关注排行RANKING
1

windows及linux服务器301重定向实现方法

windows及linux服务器301重定向实现方法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

如何设置静态内容缓存时间?

如何设置静态内容缓存时间? 我们的网站中往往包含大量的页面组件,比如图片、样式表文件、JS脚本文件和Flash动...

3

阿里云系统 Apache 开启GZIP

阿里云系统 Apache 开启GZIP 新买的阿里云系统安装使用了APACHE2 4,今天忽然发现网站没启用GZIP压缩,通过...

4

LNMP一键安装卡在Starting php-fpm解决办法

LNMP一键安装卡在Starting php-fpm解决办法 安装完成后,在启动服务的时候出现界面卡在“starting PHP-FPM”,此问题造成的原因很...

5

阿里云主机上基于CentOS用vsftpd搭...

阿里云主机上基于CentOS用vsftpd搭建FTP服务器 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

6

阿里云主机挂载数据盘

阿里云主机挂载数据盘 云服务器环境:CentOS 6 2 64位 远程连接方式:通过SSH登录终端,切...

7

LNMP安装卡在 starting php-fpm 解决方法

LNMP安装卡在 starting php-fpm 解决方法 使用军哥的LNMP一键安装包安装Nginx环境,安装完成后,重启服务的时候出现界面卡在“sta...

8

LNMP添加、删除虚拟主机及伪静态使...

LNMP添加、删除虚拟主机及伪静态使用教程 本文主要介绍LNMP一键安装包添加虚拟主机、删除虚拟主机及如何使用伪静态。

9

LNMP的安装与设置方法

LNMP的安装与设置方法 如果提示screen: command not found 命令不存在可以执行:yum install screen 或...