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 RequestHeader)此时包头中信息包含上次访问得到的Etag: "5d8c72a5edda8d6a:3239″标识.
If-None-Match: "5d8c72a5edda8d6a:3239"
,这样,Client端等于Cache了两份,服务器端就会比对2者的etag.如果If-None-Match为False,不返回200,返回304 (Not Modified) Response.
系统:centos 5.x
需要的软件:git nginx-static-etags模块包
1.安装git
如果你服务器上没有安装git,可以去参看这篇文章centos下两种方法安装git.
2.下载nginx-static-etags模块包
git clone git://github.com/mikewest/nginx-static-etags.git ./nginx-static-etags
3.编译安装
代码如下 | 复制代码 |
cd /root/install/nginx-static-etags echo ''>>ngx_http_static_etags_module.c 加一空行,否则编译会报错,这个是nginx-static-etags的bug cd /root/install/nginx-1.2.x ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.3 --add-module=../nginx-accesskey-2.0.3 --add-module=../memc-nginx-module --add-module=../srcache-nginx-module --add-module=../nginx-static-etags/ --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-http_geoip_module --with-mail --with-mail_ssl_module --with-google_perftools_module --with-ld-opt=-ltcmalloc_minimal make |
4.配置nginx
vi /etc/nginx/nginx.conf
最好是添加到你虚拟主机的server配置里.
代码如下 | 复制代码 |
location ~ .*/.(gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|xml|txt|flv|swf|mid|doc|cur|xls|pdf|txt|)$ { FileETag on; etag_format "%X%X"; www.111cn.net expires 30d; } |
重启nginx后,进行验证
curl --head http://blog.slogra.com/xx/swfobject.js
可以看到已经有etag的标识了. 原文来自:blog.slogra.com