Nginx可以更改HTTP头部,这个是Web服务器必须的,当然Nginx更可以支持在HTTP头部中添加Expires等相关信息,增强浏览器缓存,是网页加载速度增强。
能够使浏览器缓存的HTTP头部信息主要有以下三种:
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
NT
6.1
;
WOW64
;
rv
:
26.0
)
Gecko
/
20100101
Firefox
/
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.1
200
OK
Server
:
nginx
Date
:
Thu
,
16
Jan
2014
15
:
47
:
24
GMT
Content
-
Type
:
application
/
x
-
javascript
Last
-
Modified
:
Thu
,
16
Jan
2014
02
:
29
:
13
GMT
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.2
HTTP
/
1.1
Host
:
www
.
3mc2.com
User
-
Agent
:
Mozilla
/
5.0
(
Windows
NT
6.1
;
WOW64
;
rv
:
26.0
)
Gecko
/
20100101
Firefox
/
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
,
16
Jan
2014
02
:
29
:
13
GMT
HTTP
/
1.1
304
Not
Modified
Server
:
nginx
Date
:
Thu
,
16
Jan
2014
15
:
53
:
34
GMT
Last
-
Modified
:
Thu
,
16
Jan
2014
02
:
29
:
13
GMT
Connection
:
keep
-
alive
|
我的测试环境为firefox,网址中带有”?ver=”参数的文件会再次发送请求(返回304),其他文件均未再次请求。
Etag的原理是将文件资源编号一个etag值,Response给访问者,访问者再次请求时,带着这个Etag值,与服务端所请求的文件的Etag对比,如果不同了就重新发送加载,如果相同,则返回304.
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
)
{
expires
15d
;
}
location
~
.
*
\
.
(
css
|
js
)
{
expires
12h
;
}
.
.
.
.
.
.
}
|