tiodot / tiodot.github.io

总结归纳--做的东西不是每一件都留到现在 但是能通过实践,收获了如何构建一套系统,一套工具的方法论
https://xchb.work
8 stars 0 forks source link

探索Cookie #21

Open tiodot opened 7 years ago

tiodot commented 7 years ago

探索问题

  1. Cookie是什么,为什么需要?
  2. 使用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.htmlb.local.com/a.html可以通过设置domain解决:

  1. 两个页面中都使用js设置document.domain = 'local.com'
  2. 服务器设置Cookie时,加上选项:
    Set-Cookie: key=value; domain=local.com; path=/

    其他

    Cookie中字段说明可以参考HTTP cookies 详解

待研究,Cookie安全相关。

参考

  1. HTTP cookie
  2. What is the maximum size of a web browser's cookie's key?
  3. HTTP State Management Mechanism
  4. 浏览器同源政策及其规避方法
  5. HTTP cookies 详解