同源策略
所有浏览器都实行同源策略,含义大概就是,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利用,这样就会导致一些不得了的事情.
限制范围
而且现在随着互联网的发展,"同源策略"越来越严格,如果不是同源的话,共有三种行为会受限制
- cookie,localstoragy,indexdb无法获取
- dom无法获取
- 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轻易获取了.