跨域解决方案

非同源资源访问,通常会遇到下列问题。
一、cookie,localstorage,indexDB无法获取
二、DOM无法获取
三、如何成功发送ajax请求

针对上述3点问题,下面提供解决方案。
一、两网页共享cookie
跨子域:iframe+document.domain
二、文档请求不同源

1、window.name
优点:支持跨主域。
缺点:不支持POST。
2、window.postmessage
优点:支持双向通信。
缺点:仅限于HTML5。

3、location.hash
跨主域:iframe + location.hash
优点:

  • 可以解决域名完全不同的跨域;
  • 可以实现双向通讯。

缺点:

  • location.hash会直接暴露在URL里,并且在一些浏览器里会产生历史记录,数据安全性不高也影响用户体验;
  • 由于URL大小的限制,支持传递的数据量不大;
  • 有些浏览器不支持onhashchange事件,需要轮询来获知URL的变化。

4、Flash(需要服务器配合)
优点:支持强大,相对简单。
缺点:依赖flash,需要在服务器根目录放置crossdomain.xml文件。
三、ajax请求不同源
1、jsonp(需要服务器配合)
优点:

  • 它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;
  • 它的兼容性更好,在古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;
  • 在请求完毕后可以通过调用callback的方式回传结果。

缺点:

  • 它只支持GET请求而不支持POST等其它类型的HTTP请求;
  • 它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

2、cors(需要服务器配合)
优点:CORS支持所有类型的HTTP请求,是跨域HTTP请求的根本解决方案。
缺点:老浏览器不支持CORS。
3、nginx反向代理(需要服务器配合)
优点:
缺点:
4、服务器代理(需要服务器配合)
优点:
缺点:
5、websocket(需要服务器配合)
优点:
缺点:

四、工具实现跨域

1、webpack

原文地址:https://www.cnblogs.com/camille666/p/cross_domain_way.html