Skip to content

跨域几种方式

  • 同源策略: 协议 域名 端口号 同域
  • 什么是跨域:浏览器有同源策略,不允许 ajax 访问其他域接口
  • 跨域条件: 协议 域名 端口号,有一个不同就是跨域

JSONP

js
function jsonp(url) {
  var element = document.createElement("script");
  element.setAttribute("src", url);
  document.getElementsByTagName("head")[0].appendChild(element);
}

cors - 正向代理 (浏览器知道真正返回数据的地址)

  • 只服务端设置头 Access-Control-Allow-Origin 即可,前端

http-proxy - 反响代理

  • http-proxy-middleware

Nginx

add_header "Access-Control-Allow-Origin" "*";

webscoket

ws

iframe

PostMessage - window.open

  • window.open: const myPop = window.open('http://localhost:9000', 'myWindow')
  • postMessage: myPop.postMessage('abc', 'http://localhost:9000');
  • addEventListener-message: window.addEventListener('message', (event) => {})
  • event.source.postMessage('to A', 'http://localhost:8080')

PostMessage - iframe

from 里面有 ifrme to

  • from: iframe.contentWindow.postMessage('发送给 to', 'http://localhost:9000');
  • to: window.parent.postMessage('发送给 from', 'http://localhost:8080');

document.domain

from 里面有 ifrme to

  • from: document.domain = 'test.com'
  • to: document.domain = 'test.com'

window.name

iframe 加载好,修改 iframe.src 为同源

location.hash

  • 记不住

在 MIT 许可下发布