Brower-same-origin-policy-and-cross-origin-http-request

brower-same-origin-policy-and-cross-origin-http-request

[toc]

同源策略

是一种约定,他是浏览器最核心也是最基本的安全功能。

两个页面拥有相同的协议、端口、和主机那么这两个页面就属于同源,当然了IE有例外

  1. 两个互相之间高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制
  2. 端口:IE未将端口号加入到同源策略的组成部分。

在同源策略中有一个例外,脚本可以设置 document.domain 的值为当前域的一个后缀,如果这样做的话,短的域将作为后续同源检测的依据。例如,假设在 http://store.company.com/dir/other.html 中的一个脚本执行了下列语句:

document.domain = "company.com";

这条语句执行之后,页面将会成功地通过对 http://company.com/dir/page.html 的同源检测。

使用document.domain是让子域访问其父域,需要同时将子域和父域的document.domain设置为相同的值。必须要这么做,即使是简单的将父域设置为其原来的值。没有这么做的话可能导致授权错误。

跨域内嵌的资源

  1. script
  2. link
  3. img
  4. video和audio
  5. object,embed,applet
  6. @font-face
  7. frame和iframe

实现跨域访问

使用CORS来实现跨域访问

  1. 简单请求,只需要设置 Access-Control-Allow-Origin: *
  2. 预请求
  3. 附带凭证信息的请求xml.withCredentials = true;如果服务器端的响应中,如果没有返回Access-Control-Allow-Credentials: true的响应头,那么浏览器将不会把响应结果传递给发出请求的脚步程序,以保证信息的安

使用跨域内嵌资源实现

  1. JSONP
  2. iframe
  3. window.name
  4. document.domain
  5. location.hash
  6. window.postMessage

参考资料

HTTP请求头

  1. Origin
  2. Access-Control-Request-Method
  3. Access-Control-Request-Headers

HTTP响应头

  1. Access-Control-Allow-Origin
  2. Access-Control-Expose-Headers
  3. Access-Control-Max-Age 预请求的结果有效期是多久
  4. Access-Control-Allow-Credentials
  5. Access-Control-Allow-Methods
  6. Access-Control-Allow-Headers

跨域脚本API和跨域数据存储访问

  1. iframe.contentWindow, window.parent, window.open, window.opener 允许文档之间相互引用,当两个文档的源不同时,这些引用方式将受到影响。可使用 window.postMessage 作为替代方案。
  2. localStorageindexedDB 每个源拥有单独空间,不能跨域做读写操作。
  3. window.name 属性可以用来临时存储数据,支持跨域访问。
  4. Cookies使用不同的源定义方式。一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public suffix)即可。Firefox和Chrome使用Public Suffix List决定一个域是否是一个公共后缀(public suffix)。不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains)来访问cookie。设置cookie时,你可以使用Domain,Path,Secure,和Http-Only标记来限定其访问性。读取cookie时,不会知晓它的出处。尽管使用安全的https连接,任何可见的cookie都是使用不安全的连接设置的。

你可能感兴趣的:(Brower-same-origin-policy-and-cross-origin-http-request)