跨域

本文介绍了四种常见的跨域请求处理方式:使用Flash插件、通过同源域名下的代理服务器转发、利用JSONP进行GET请求和使用CORS实现跨域资源共享。每种方法都有其适用场景和限制。

方式:

一 是通过Flash插件发送HTTP请求,这种方式可以绕过浏览器的安全限制,但必须安装Flash,并且跟Flash交互。不过Flash用起来麻烦,而且现在用得也越来越少了。

二 是通过在同源域名下架设一个代理服务器来转发,JavaScript负责把请求发送到代理服务器:

'/proxy?url=http://www.sina.com.cn'

代理服务器再把结果返回,这样就遵守了浏览器的同源策略。这种方式麻烦之处在于需要服务器端额外做开发。

三  JSONP,它有个限制,只能用GET请求,并且要求返回JavaScript。这种方式跨域实际上是利用了浏览器允许跨域引用JavaScript资源:

<script src="http://example.com/abc.js"></script>

JSONP通常以函数调用的形式返回,例如,返回JavaScript内容如下:foo('data');
如果在页面中先准备好foo()函数,然后给页面动态加一个<script>节点,相当于动态读取外域的JavaScript资源,最后就等着接收回调了。
<html>

<head>
    <meta charset='utf-8' />
</head>
<script>
    // refreshPrice 对应就好
function refreshPrice(data){
    var p=document.getElementById("test-jsonp");
    p.innerHTML="当前价格:"+
    data['0000001'].name+':'+data['0000001'].price
}

function getPrice(){    
    var price=document.createElement('script');
    var head=document.getElementsByTagName("head")[0];
    price.src= 'http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice';
    head.appendChild(price);
}
</script>


<body>
    <p id="test-jsonp">here</p>
    <button type='button' οnclick='getPrice()'>refresh</button>
</body>

</html>
 

四 CORS

浏览器支持HTML5,那么就可以一劳永逸地使用新的跨域策略:CORS了。

CORS全称Cross-Origin Resource Sharing,是HTML5规范定义的如何跨域访问资源。

假设本域是my.com,外域是sina.com,只要响应头Access-Control-Allow-Originhttp://my.com,或者是*,本次请求就可以成功。

可见,跨域能否成功,取决于对方服务器是否愿意给你设置一个正确的Access-Control-Allow-Origin,决定权始终在对方手中。




转载于:https://www.cnblogs.com/justSmile2/p/9720292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值