首页 >运维 >windows运维 >什么是跨域怎么解决

什么是跨域怎么解决

云罗郡主
云罗郡主原创
2019-02-22 11:31:1054934浏览

相信很多人都听说过跨域,但是很多人都不知道跨域是什么意思,那么,接下来我们来讲解一下什么是跨域,以及怎么解决。

一:什么是跨域

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。浏览器从一个域名的网页去请求另一个域名的资源时,出现域名、端口、协议任一不同,都属于跨域。

二:跨域怎么解决

1、jsonp跨域

JSONP(JSON with Padding:填充式JSON),应用JSON的一种新方法,

JSON、JSONP的区别:

1、JSON返回的是一串数据、JSONP返回的是脚本代码(包含一个函数调用)

2、JSONP 只支持get请求、不支持post请求

(类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是Get请求)

2、nginx反向代理:

www.baidu.com/index.html需要调用www.sina.com/server.php,可以写一个接口www.baidu.com/server.php,由这个接口在后端去调用www.sina.com/server.php并拿到返回值,然后再返回给index.html

3、PHP端修改header

header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问

header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

4、document.domain

跨域分为两种,一种xhr不能访问不同源的文档,另一种是不同window之间不能进行交互操作;

document.domain主要是解决第二种情况,且只能适用于主域相同子域不同的情况;

document.domain的设置是有限制的,我们只能把document.domain设置成自身或更高一级的父域,且主域必须相同。例如:a.b.example.com中某个文档的document.domain可以设成a.b.example.com、b.example.com 、example.com中的任意一个,但是不可以设成c.a.b.example.com,因为这是当前域的子域,也不可以设成baidu.com,因为主域已经不相同了。

5、window.name 关键点:window.name在页面的生命周期里共享一个window.name;

兼容性:所有浏览器都支持;

优点:

最简单的利用了浏览器的特性来做到不同域之间的数据传递;

不需要前端和后端的特殊配制;

缺点:

大小限制:window.name最大size是2M左右,不同浏览器中会有不同约定;

安全性:当前页面所有window都可以修改,很不安全;

数据类型:传递数据只能限于字符串,如果是对象或者其他会自动被转化为字符串。

6、postMessage

关键点:

postMessage是h5引入的一个新概念,现在也在进一步的推广和发展中,他进行了一系列的封装,我们可以通过window.postMessage的方式进行使用,并可以监听其发送的消息;

兼容性:移动端可以放心用,但是pc端需要做降级处理

优点

不需要后端介入就可以做到跨域,一个函数外加两个参数(请求url,发送数据)就可以搞定;

移动端兼容性好;


以上是什么是跨域怎么解决的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn