ihtml5 / blog

个人博客 源码阅读*前端实践 My Blog
MIT License
6 stars 0 forks source link

跨域知识大全 #34

Open ihtml5 opened 7 years ago

ihtml5 commented 7 years ago

背景

跨域字面意不同域,域指的是资源的访问路径包括协议,域名,端口,页面路径,跨域指的是协议,域名,端口,页面路径四者中至少其中之一不同。

注意: 协议和端口不同,不能仅靠设置客户端来实现跨域

实现跨域的常见方式有以下几种:

  1. 主域相同,比如http://www.a.com/a.html和http://www.a.com/b.html之间跨域通信 首先要在a.html和b.html中设置document.domain = 'a.com',然后通过iframe在一个页面加载另一个页面来实现通信。
  2. 通过动态插入js脚本,来实现跨域
  3. hash+iframe,通过子iframe更改父页面location来进行数值传递,如果遇到兼容性问题,考虑使用同域来解决
  4. 通过在需要跨域访问的页面中设置window.name,来进行数据传递
  5. 通过设置xhr.withCredential=true或者使用xDomainRequest来设置自定义的请求头,来让服务端决定是否跨域请求成功
  6. 通过window.postMessage,指定跨域目标源来实现跨域
  7. jsonp,在script的src中传入参数,想服务器端请求需要执行的函数,然后在客户端执行
  8. webscoket 在需要跨域的服务器上部署websocket服务,这样可以通过websocket直接进行通信

相关链接

  1. 前端解决跨域的8种方案