cookie-free domain

cookie-free domain的解释:在请求下载静态小图片、静态小文件的时候,浏览器会把它当成普通请求一样,在request的header信息里附加cookie信息。

但实际上,99.99%的静态小图片、静态小文件都需要知道任何cookie信息。如果每个header都附加1kB的cookie,那么对于一个有50个小文件的复杂网页来讲,就白白增加了50kB的传输量。

为了避免让浏览器发送这些无用的cookie信息,在服务器端做设置都是没有用的,因为这浏览器端主动发送的。只有通过使用另一个不存在cookie的域名,才能让浏览器不发送cookie信息。

php在默认情况下,会给当前的域名,如:example.com域名设置cookie,这种情况下,只要把静态文件放在static.example.com这样的子域名上就可以让浏览器不发送cookie了。

但是如果php设置了泛域名的cookie,比如.example.com,那么二级域名是没有用的,必须采用另一个顶级域名,才能避免cookie发送。

图虫已经设置了泛域名的cookie,因此必须采用另一个顶级域名。于是我把所有的静态文件,迁移到了static.tuchong.net,从此以后用static.tuchong.net提供静态小文件,从而实现cookie-free domain。


Cookie 有两个重要的属性:domain 和 path。当浏览器访问一个网站时,只有 domain 和 path 都满足条件时,才会发送相应的 Cookie 到这个网站的服务器。而服务器在要求浏览器设置 Cookie 时,也只能设置与当前网站匹配的 domain 属性。

Cookie domain 属性的匹配方法,简单示例如下:

  • cookie.domain = "opoo.org" 该 Cookie 只能发给域 opoo.org,不能发到子域 www.opoo.org, static.opoo.org 等
  • cookie.domain = ".opoo.org" 该 Cookie 可以发给域 opoo.org 及其下所有子域,包括 www.opoo.org, static.opoo.org 等
  • cookie.domain = "www.opoo.org" 该 Cookie 只能发给域 www.opoo.org, 不能发给域 opoo.org 及 static.opoo.org 等

由此可以看出,裸域的 Cookie 会不会污染到子域,主要就在于设置 Cookie 的 domain 属性值前面的那个“.”。前缀点(leading dot, leading period, dot prefix, whatever..)大致相当于泛域名匹配吧。

自行检验:用 Chrome 开发人员工具或者 Firebug 观察 Github.com 和SourceForge.net 网站及其子网站的请求/响应头信息中的 Cookie 信息。这两个网站就是伺服在裸域名上的。

又注:

避免域名污染。 当浏览器向服务器请求一个静态资源时,会先发送同域名下的 cookie,服务器对于这些 cookie 不会做任何处理。因此它们只是在毫无意义的消耗带宽。所以你应该确保对于静态内容的请求是无coockie的请求。
如果给 126.com 设置了cookie,那么会感染所有子域名, 请求 126.com/logo.gif或者image.126.com/logo.gif 时便会带上讨厌的cookie。
所以要用单独的域名,以减少请求,提高网页性能。



猜你喜欢

转载自blog.csdn.net/qq_40268306/article/details/80467400