在上一小节中我们介绍了如何通过减少cookie的大小来提升性能,cookie虽然有很多的优势,但并不是说cookie是万能的。

当我们浏览器向伺服器发送一些静态文件时,如图片、CSS样式等,在发送请求的同时会将cookie也同时发送到伺服器,如图所示。

上图中发送的cookie是和图片的请求一同发送到我们网站域上的,因为这里并没有使用其它的子域来处理cookie的内容,在cookie的内容中可以看到。

但其实此时伺服器并不会对cookie做任何处理动作。这样使用HTTP的响应时间变的更长,同时还会浪费网站的带宽,所以我们建议使用cookie-free domains的方法来优化该性能。

所以我们希望发送静态文件时,不希望同时发送cookie,一些大型网站都不会在浏览器向伺服器发送静态文件的同时发送cookie文件或者由其它子域来完成,如图13-21是Yahoo网站发送静态图片的情况,并没有带cookie

如果将cookie设置在顶级域(例如yourwebsite.com),则所有子域(例如iym.yourwebsite.com)也将包含已设置的cookie。因此,在这种情况下,如果要使用无cookie域,则需要使用单独的域名来提供静态内容。但是,如果您在www子域上设置cookie,则yourwebsite.com可以创建另一个子域(例如static.yourwebsite.com)来托管所有静态文件,这样这些文件将不再导致发送任何cookie。

使用cookie free域有以下优点:

1) 减少网路流量;

2) 减少静态内容的载入时间;

以nginx为例,如果需求从无cookie域提供静态内容,那么必须先创建一个不包含cookie的子域,并将其指向与主域所在的同一伺服器,如以下代码:

test.com A 192.168 .3 .13

static . test.com A 192.168 .3 .13

test.com是我们的网站,static. test.com是存放无cookie内容的地方。

接下来,需要在NGINX配置文件(ngix.conf)并添加以下代码:

server {

listen ip:80;

server_name test.com;

root /srv/http/nginx/ test.com;

access_log logs/ test.com.access.log;

location / {

index index.html;

charset utf-8;

}

}

}

server {

listen 192.168.13.33:80;

server_name static.test.com;

root /srv/http/nginx/test.com;

location / {

if ($request_filename ~ ".(jpg|css|gif|png|swf|ico|mp3)$") {

break;

}

return 404;

}

}

接下来需要修改前端访问伺服器上的内容,如以下代码:

正常是使用以下代码来访问图片的:

< img src = 「 / images /testimage.png」 />

现在应该修改为以下访问图片的方式:

< img src = 「static.test.com/images/」 />

现在如果向伺服器请求testimage.png这个静态文件时,nginx就会使用static.test.com来提供。

推荐阅读:

相关文章