前端跨域问题解决

155 阅读1分钟

跨域是指一个域去访问另外一个域的资源。为了防止xSS、CSFR等攻击,所有的访问资源和请求,必须遵循同源策略(即"协议+域名+端口"三者相同),主要限制:Cookie、LocalStorage无法读取,AJAX 请求不能发送。 解决方案:

  1. 通过jsonp跨域
  2. document.domain + iframe;location.hash + iframe;window.name + iframe
  3. 跨域资源共享(CORS)
  4. postMessage跨域
  5. nginx代理跨域
  6. WebSocket协议跨域

具体操作如下:

jsonp 跨域

script标签src属性中的链接却可以访问跨域的js脚本,所以可以通过动态创建script,再请求一个带参网址实现跨域通信,缺陷是 必须是get请求。

$.ajax({ url: 'www.demo2.com:8080/login', type: 'get', dataType: 'jsonp', // 请求方式为jsonp jsonpCallback: "onBack", // 自定义回调函数名 data: {} });

跨域资源共享

只服务端设置Access-Control-Allow-Origin即可,前端无须设置,若要带cookie请求:前后端都需要设置 // 前端设置是否带cookie xhr.withCredentials = true;