js跨域

作者: xilong | 来源:发表于2018-04-19 10:48 被阅读15次

1、什么是跨域?

因为浏览器的同源策略(协议、域名、端口)限制。浏览器不能够直接进行跨域访问,只有img、script、iframe等这类可以指定src属性的标签有跨域获取别人网站上数据的能力。
至于为什么要这样限制,主要还是为了安全考虑,避免恶意网站获取正常网站的数据。

2、实现跨域的方法

2.1服务器代理
浏览器有跨域限制,但是服务器就不存在跨域问题,可以让服务器请求所要域的资源,再返回给客户端。
2.2:jsonp实现跨域

基本原理就是通过动态创建script标签,然后利用src属性进行跨域。

    // 定义一个fun函数
    function fun(fata) {
        console.log(data);   //获取的 数据
     };
    // 创建一个脚本,并且告诉后端回调函数名叫fun
    var body = document.getElementsByTagName('body')[0];
    var script = document.createElement('script');
    script.type = 'text/javasctipt';
    script.src = 'demo.js?callback=fun';
    body.appendChild(script);

    fun({data:'yourdata'})   //服务器 返回的数据类似这样

自己传函数名(如:fun)都是那些牛逼哄哄的开发者想到的,这样不同的人调用可以执行不同本地函数,但是取的数据是一样的,后台返回的代码是动态生成的。
返回的js脚本,会立即执行。然后我们又刚好事先定义好了 fun函数,fun函数里面的data就是取过来的数据,所以我们就可以愉快的处理返回回来的数据了。
在实际使用的时候,我们用的各种ajax库(如:Jquery),基本都包含了jsonp的封装,看看这些库的文档基本都找的到。
实际上用src属性请求数据就是一个get请求,所以jsonp不能获取 post请求才能获取的数据。
参考 知乎关于跨域回答 IoveC博客

2.1:CORS 实现跨域

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与()。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
如果要带cookie过去 只需要设置 xhr.withCredentials = true;

CORS与JSONP的使用目的相同,但是比JSONP更强大。
JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据,jsonp更加广泛。

参考 阮一峰cors详解

相关文章

  • 跨域

    跨域 什么是跨域: 解决跨域 通过jsonp原理:在页面引入跨域js和css时,没有存在跨域问题.因此可以动态创建...

  • 跨域问题详解分析

    参考文档 CORS详解 跨域资源共享 CORS 详解 js中几种实用的跨域方法原理详解 跨域的那些事儿 跨域与跨域...

  • 2021-02-23

    一、什么是跨域 二、vue.config.js 跨域配置

  • HTML-获取iframe元素的正确方法

    跨域相关文章详解js跨域问题JavaScript跨域总结与解决办法 解释最清楚的jsonpWhat is JSON...

  • JSONP、CORS、跨域

    跨域 同源:两个文档同源需满足:协议、域名、端口相同跨域:不同域之间相互请求资源,就算作“跨域“。js进行DOM操...

  • 怎么能学好Web前端开发,如何去解决JS跨域问题

    如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或...

  • 如何去解决JS跨域问题 怎么能学好Web前端开发

    如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或...

  • 关于js中的跨域

    @(JS技巧)[跨域] 各种跨域方法详解 总是在听说跨域,可是自己除了JSON,其它的方法其实并不是真的理解。今晚...

  • vue 跨域的配置

    关于跨域的配置真是累呀 在网上找了资料 才成功实现跨域了 其实主要在vue.config.js 来配置跨域

  • 3.跨域

    什么是跨域? js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过...

网友评论

      本文标题:js跨域

      本文链接:https://www.haomeiwen.com/subject/ajdtkftx.html