Open tiodot opened 7 years ago
Cookie 就是浏览器储存在用户电脑上的一小段文本信息,当浏览器发送请求时会在请求头的Cookie字段带上这些信息。仔细一想,浏览器怎么知道这些文本信息的? 一般而言第一次访问某个网站时,请求中是没有Cookie信息的,然后服务器会响应请求时,可以设置响应头Set-Cookie字段,浏览器收到响应之后,会保留Set-Cookie中的信息,下次发同源请求时就会带上这些信息。 服务器既要设置Cookie信息,又要让浏览器把这些信息再带回来,这又是为什么呢? 因为Http协议是无状态的,需要额外的信息来区分请求。例如一个网站需要登录,第一次访问时,输入帐号信息,然后提交登录,此时就可以访问该网站的其他页面了。如果没有Cookie这种机制,再次访问时,服务器并不能区分是否已经登录过,所以还是会让继续登录。
Cookie
Set-Cookie
规范rfc2965 5.3 Implementation Limits指出Cookie理论上可以无限大,但各个浏览器实现时,做了一些限制。为了适应大多数浏览器,每一个域名下不应超过50条cookie信息,最大为4093 bytes。也就是说所有cookies最大为4k,超过时,浏览器可能会超过部分自动删除。
两个页面需要共享Cookie时,这两个页面的一级域名相同才行。至于协议不同、端口不一致,只要是域名一样,Cookie还是共享。 对应一级域名相同,二级或者三级域名不一致的,例如a.local.com/a.html和b.local.com/a.html可以通过设置domain解决:
a.local.com/a.html
b.local.com/a.html
domain
document.domain = 'local.com'
Set-Cookie: key=value; domain=local.com; path=/
Cookie中字段说明可以参考HTTP cookies 详解
待研究,Cookie安全相关。
探索问题
Cookie是什么,为什么需要
Cookie 就是浏览器储存在用户电脑上的一小段文本信息,当浏览器发送请求时会在请求头的
Cookie
字段带上这些信息。仔细一想,浏览器怎么知道这些文本信息的? 一般而言第一次访问某个网站时,请求中是没有Cookie信息的,然后服务器会响应请求时,可以设置响应头Set-Cookie
字段,浏览器收到响应之后,会保留Set-Cookie
中的信息,下次发同源请求时就会带上这些信息。 服务器既要设置Cookie信息,又要让浏览器把这些信息再带回来,这又是为什么呢? 因为Http协议是无状态的,需要额外的信息来区分请求。例如一个网站需要登录,第一次访问时,输入帐号信息,然后提交登录,此时就可以访问该网站的其他页面了。如果没有Cookie这种机制,再次访问时,服务器并不能区分是否已经登录过,所以还是会让继续登录。使用Cookie的限制
大小限制
规范rfc2965 5.3 Implementation Limits指出Cookie理论上可以无限大,但各个浏览器实现时,做了一些限制。为了适应大多数浏览器,每一个域名下不应超过50条cookie信息,最大为4093 bytes。也就是说所有cookies最大为4k,超过时,浏览器可能会超过部分自动删除。
同源策略影响
两个页面需要共享Cookie时,这两个页面的一级域名相同才行。至于协议不同、端口不一致,只要是域名一样,Cookie还是共享。 对应一级域名相同,二级或者三级域名不一致的,例如
a.local.com/a.html
和b.local.com/a.html
可以通过设置domain
解决:document.domain = 'local.com'
;其他
Cookie中字段说明可以参考HTTP cookies 详解
待研究,Cookie安全相关。
参考