cookie的补充学习

同源策略

所有浏览器都实行同源策略,含义大概就是,A网页设置的cookie,B网页打不开,除非这两个网页"同源" 所谓的同源就是

  • 协议相同
  • 域名相同
  • 端口相同

举例来说:http://www.example.com的协议是http,域名是www.example.com,端口80 他的同源情况如下:

  • http://www.example.com/page.html(同源)
  • http://example.com/page.html(不同源,域名不同,www.example.com是二级域名)
  • https://www.example.com/page.html(不同源,协议不同,这个是https,前面的是http)
  • http://www.example.com:81/page.html(不同源,端口不同,前面80,这个81)

同源策略的目的

同源策略的目的是为了保证用户的安全,防止恶意网站窃取cookie。如果没有同源策略,A网站的cookie可以在用户流量A后浏览B网站时被B获取,那么A的cookie就可能被B利用,这样就会导致一些不得了的事情.

限制范围

而且现在随着互联网的发展,"同源策略"越来越严格,如果不是同源的话,共有三种行为会受限制

  1. cookie,localstoragy,indexdb无法获取
  2. dom无法获取
  3. ajax请求无法发送

虽然这些限制很有必要,但是有时很不方便。例如我同一个网站的不同域名之间不能共享cookie,再例如我前端页面项目的域名与我后端服务的域名不同,就不能发送ajax请求来访问 后端的服务etc... 如果要避免的话可以使用jsonp和cors两种方法(后续补上...顺便学习)

cookie作用域

这就要看cookie的两个属性了,一个是domain,一个是path,用来指示cookie的作用域 domain告诉浏览器cookie的域名归属,未指定的时候就是当前域名 path告诉浏览器cookie的路径归属,未指定就是当前路径,比如通过访问www.vinceruan.info/java/hotspot.html添加的Cookie的默认路径就是/java/,通过blog.vinceruan.info/java/hotspot.html生成的Cookie的路径也是/java/. cookie的提交需要满足两点: 1.cookie为当前域名或者父域名下的cookie 2.cookie为当前路径或者父路径下的cookie 举个例子:要访问blog.example.com的时候

  • cookie1:[name=value,domain=.example.com,path=/] (可以提交.example.com是blog.example.com的父域名,path也一致)
  • cookie2:[name=value,domain=blog.example.com,path=/] (不能提交,域名一致,但是路径不一致)
  • cookie3:[name=value,domain=www.example.com,path=/] (不能提交,虽然路径一致但域名不一致)
  • cookie4:[name=value,domain=blog.example.com,path=/] (可以提交,域名路径严格一致)

关于httponly

httponly这个点之前一直没看,近期补了一下 大概就是说被设置为httponly的cookie不能通过document.cookie来被获取 因此就不会被黑客用xss轻易获取了.