跨域

含义:

不满足浏览器的同源策略的请求响应会被浏览器拦截

同源策略:同协议,同域名,同端口,

解决方法:

1. jsonp

 <script>
    var script = document.createElement('script');
    script.type = 'text/javascript';
    // 传参一个回调函数名给后端,方便后端返回时执行这个在前端定义的回调函数
    script.src = 'http://www.domain2.com:8080/login?user=admin&callback=handleCallback';
    document.head.appendChild(script);
    // 回调执行函数
    function handleCallback(res) {
        alert(JSON.stringify(res));
    }
 </script>

原理:利用script标签不受同源协议影响的特点,

缺点:

  1. 只能发起get请求
  2. 需要对来源(请求头中的refer)进行筛选

2. 跨域资源共享(CORS)

只需服务端设置Access-Control-Allow-Origin即可,但由于浏览器的同源策略,a.com向b.com发送请求时只会携带b.com的cookie,所以如果前端想携带cookie就需要设置

前端设置是否带cookie
xhr.withCredentials = true;

3.nginx代理跨域

反向代理

4.websocket双向通信实现跨域

WebSocket protocol是HTML5一种新的协议。不同于之前的http协议,只能由客户端向服务端发送请求,
WebSocket 支持双向通信,服务端也可以向客户端发送请求,并且支持跨域

// 初始化一个 WebSocket 对象
var ws = new WebSocket("ws://localhost:9998/echo");

// 建立 web socket 连接成功触发事件
ws.onopen = function () {
  // 使用 send() 方法发送数据
  ws.send("发送数据");
  alert("数据发送中...");
};

// 接收服务端数据时触发事件
ws.onmessage = function (evt) {
  var received_msg = evt.data;
  alert("数据已接收...");
};

// 断开 web socket 连接成功触发事件
ws.onclose = function () {
  alert("连接已关闭...");
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。那什么是跨域呢,简单地理解就...
    强哥科技兴阅读 2,806评论 0 0
  • 一、什么是跨域 url的组成 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。那什么是跨域呢...
    古城凌三少阅读 10,128评论 0 0
  • 什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。那什么是跨域呢,简单地理解就是因...
    oWSQo阅读 3,214评论 1 3
  • 一、同源策略 什么是浏览器的同源策略?浏览器出于安全考虑,只允许相同域下的资源进行交互,不同源下的脚本在没有明确授...
    Da_xiong阅读 3,587评论 0 1
  • 一、什么是跨域 有一点必须要注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被...
    无剑_君阅读 3,138评论 0 4

友情链接更多精彩内容