Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1025132
  • 博文数量: 157
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1388
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-09 15:37
文章分类

全部博文(157)

文章存档

2023年(9)

2022年(2)

2021年(18)

2020年(7)

2017年(13)

2016年(53)

2015年(55)

我的朋友

分类: 服务器与存储

2015-11-25 17:09:18

今天咱们讨论下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这个参数的值来达到类型区分缓存的目的但是没有达到,我测试看每次都缓存了,还需要进一步研究,也盼望高手给我点指教。
阅读(3285) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~