今天咱们讨论下cookie:
cookie简述及分类:
cookie是当前识别用户,实现持久会话的最好方式,cookie的存在也影响了缓存,大多数缓存和浏览器都不允许对任何cookie的内容进行缓存。
cookie可以笼统的分为两类:会话cookie和持久cookie
会话cookie: 用户退出浏览器,会话cookie就被删除,如果设置了discard参数或者没有设置expires或max-age参数来说明扩展的过期时间,这个cookie就是一个会话cookie.
持久cookie: 存储在硬盘上,浏览器退出,计算机重启时他们仍然存在,通常用持久cookie维护某个用户周期性访问的站点的配置文件或登录名。
不同的站点使用不同的cookie:
1. 域属性:来控制哪些站点可以看到这个cookie:
如果set-cookie: user="test" ; domain="test.com",则来自的请求头中会带上cookie:user="test",而来自的请求头中不会带上这个cookie
2. 路径属性:在这个属性列出的url路径前缀下的所有cookie都是有效的
如果set-cookie:pref=compact; domain="test.com";path=/video/,则的请求头中就会带上pref=compact这个cookie值,而的请求头中就不会带上pref=compact这个cookie值
cookie版本:
###1. 版本0的set-cookie首部属性:
name=value 强制的
expires 可选, 格式如:Wednesday, 19-OCT-05 23:12:40 GMT ,如果没有设置expires或者值设置为0则当成会话cookie
domain 可选
path 可选
secure 可选,如果包含这一属性,就只有在http使用ssl安全连接时才会发送cookie
###2. 版本0的cookie首部:
把所有符合的未过期的cookie组合起来发送,如:cookie:session-id=001-1234567-2345678;session-id-time=1007884822
###3. cookie版本1引入了set-cookie2首部和cookie2首部:
set-cookie2首部:
name=value 强制的
version 强制的
comment 可选的,必须采用utf-8编码
commentURl 可选
discard 可选
domain 可选
max-age 可选
path 可选
port 可选
secure
###4. 版本0和版本1的cookie首部协商;
如果客户端支持版本0和版本1的cookie,如果本次存有set-cookie和set-cookie2,则下次请求中会带cookie2,如果本地仅存有set-cookie,则下次请求中会带cookie和cookie2: $Version="1"。
如果客户端只支持版本0,则下次请求中只会带cookie。
cookie与缓存:
1. 如果无法缓存文档,要将其标示出来
除了set-cookie首部外的文档可缓存,使用cache-control:no-cache="set-cookie"
通用做法是为可缓存的文档使用cache-control:public,这样有助于节省web中的带宽
2. 缓存set-cookie首部时要小心
如果响应中有set-cookie首部,如没特殊说明就可以对主体进行缓存,但要注意对set-cookie首部的缓存,可以这样---cache-control:must-revalidate,max-age=0
3.小心处理带有cookie首部的请求
带有cookie首部的请求到达时,就在提示我们,得到的结果可能是私有的,一定要将私有内容标识为不可缓存的。更广泛接受的策略是缓存带有cookie首部的图片,将过期时间设置为0,强制每次都进行再验证
注意第三方web站点使用持久cookie来跟踪用户就是一种对cookie最大的滥用
==============
默认情况下,traffic server 不缓存包含set-cookie响应头部的对象
默认情况下,traffic server缓存包含cookies请求服务的响应对象(除了文本对象)
ats的records.config中的配置项:
proxy.config.http.cache.cache_responses_to_cookies INT 1 ---设置这个变量来指定traffic server 缓存cookie内容的方式:
0:不缓存任何cookies响应
1:缓存所有的cookies响应
2:只缓存图片类型的cookies响应
3:缓存除了文本内容类型的所有cookies响应
还有个点需要注意:比如,如果设置proxy.config.http.cache.cache_responses_to_cookies 变量为2(只缓存图片格式的cookies),同时设置proxy.config.http.cache.vary_default_text变量为指定的cookie,cookie的alternates将不接受文本格式。
有些缓存允许使用缓存set-cookie图片但不缓存文本的模式,这个怎么设置?--我在ats中通过设置proxy.config.http.cache.cache_responses_to_cookies这个参数的值来达到类型区分缓存的目的但是没有达到,我测试看每次都缓存了,还需要进一步研究,也盼望高手给我点指教。
阅读(3350) | 评论(0) | 转发(0) |