首页 > 试题广场 >

解决跨域问题

跨域通信的几种方式:
JSONP 
Hash(hash改变,页面是不刷新的,?后是search,改变时会刷新页面) 
postMessage(新技术,h5的标准) 
WebSocket 
CORS(可以理解为支持跨域通信的变种Ajax。当你在浏览器中发送一个ajax跨域请求时,浏览器会在http头中加入一个origin。如果只是一个普通的ajax,则会被浏览器拦截)
发表于 2019-02-01 16:50:16 回复(0)
常用的跨域方法有这样一些: 1:使用iFrame访问另一个域。 然后再从另一个页面读取iFrame的内容。jquery等有一些封装。 据说Firefox等可能不支持读取另一个iFrame的内容。 2:jsonp。需要服务器支持。使用script src动态得到一段java代码。是回调页面上的js函数,参数是一个json对象。 jquery也有封装。 3:设置http头,Access-Control-Allow-Origin:* 但据说IE有一些版本不识别这个http头。 4:服务器***。如,服务器写一个url的处理action。其参数是一个url。这个服务器会用参数拼凑一个url,用httpclient库去执行url,然后把读取的内容再输出到http客户端。 ps: nginx反向***实现跨域 上面提到的这些跨域方法,都有一些问题。有的不能支持所有浏览器,有的需要修改javascript代码,有的需要重写服务器端代码。有的在session等场景下会有问题。 其实,用nginx反向***实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。 我们只需要配置nginx,在一个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。这样,这个服务器上所有url都是相同的域名、协议和端口。因此,对于浏览器来说,这些url都是同源的,没有跨域限制。而实际上,这些url实际上由物理服务器提供服务。这些服务器内的javascript可以跨域调用所有这些服务器上的url。
编辑于 2016-03-15 11:13:24 回复(0)

设置document.domain

采用这种方法的前提是跨域请求涉及的两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80)。例如,aaa.xxx.com里面的一个页面需要调用bbb.xxx.com里的一个对象,则将两个页面的 document.domain都设置为xxx.com,就可以实现跨域调用了。 另外,需要注意的是,这种方式只能用在父、子页面之中,即只有在用iframe进行数据访问时才有用。

通过script标签加载

对于浏览器来说,script标签的src属性所指向资源就跟img标签的src属性所指向的资源一样,都是一个静态资源,浏览器会在适当的时候自 动去加 载这些资源,而不会出现所谓的跨域问题。这样我们就可以通过该属性将要访问的数据对象引用进当前页面而绕过js跨域问题。 例如,在space的我的空间项目中,需要在hi域下管理中心页面中随机推荐几个热门模块给用户,由于热门模块的相关信息都在act域下的php模块中维 护,如果直接在hi域下通过ajax请求去获取act域下的推荐模块列表相关信息就出现js跨域问题。解决这个问题的最简单方法就是,在hi域下通过 script标签去访问act域提供的这个http接口:

<script type=”text/javascript” src=”http://act.hi.baidu.com/widget/recommend”><script>
发表于 2015-09-21 21:39:37 回复(0)
还有CORS
发表于 2015-09-10 17:07:49 回复(0)
<p>nginx postmessage</p>
发表于 2020-09-11 17:16:03 回复(0)
<p>1.jsonp</p><p>2.iframe</p><p>3.代理</p><p><br></p>
发表于 2020-08-29 16:35:23 回复(0)

JSON

hash

postmessage

CORS

WEBSOCKET

发表于 2020-02-29 21:21:13 回复(0)

1.COSR

2.jsonp

3.postMessage

4.iframe

编辑于 2019-10-12 08:33:00 回复(0)

跨域问题:

1.jsonp

2.document.domain+iframe

3.cors

4.window.name window.postMessage

编辑于 2019-06-07 12:08:28 回复(0)
一共有8种方法吧?
发表于 2016-10-13 23:25:34 回复(0)
1. jsonp(jsonp 的原理是动态插入 script 标签)
2. document.domain + iframe
3. window.name、window.postMessage
4. 服务器上设置***页面
发表于 2015-07-27 14:38:27 回复(1)