jsonp VS W3C 的Cross-Origin Resource Sharing

才看到W3C的cross original resource sharing,又多了一种跨域的选择.

(官方的跨域解决出现了,看了下文档时间貌似很久了...我果然很out)


那和民间标准jsonp 比有啥优势呢:

[color=blue]1.支持多种http方法[/color]

jsonp一般只支持get方法。

而w3c的cross orginal resouce sharing 支持http的其他几种方法,例如put,delete...

[color=blue]2.简单[/color]

对于服务端来说,设置一个response head 就能搞定W3C CORS,


Access-Control-Allow-Origin: http://your site


检查下origin就可以选择是否要返回response.


而对于jsonp来说,要进行安全检查

[color=blue]3.安全[/color]

这个就不废话了,jsonp就是script注入,跨站攻击一般都会考虑....

劣势:

这玩意儿要看浏览器颜色,和HTML5一样 不是谁都可以用的........
----------------------------------------------------------------------

W3C CORS客户端实现

只搞了FF的,IE的貌似是XDomainRequest.....下次补上

var XCOS = function(type,url){
var xhr = new XMLHttpRequest();

if (xhr && "withCredentials" in xhr){
xhr.open(type, url, true);
}
else xhr = null;
var success = function(msg,obj){
alert(msg);
};
var error = function(obj){
alert("error");
};
var handle_load = function (event_type) {
return function (XHRobj) {
if (event_type == 'load' && (XHRobj.readyState == 4) && success)
success(XHRobj.responseText, XHRobj);
else if (error)
error(XHRobj);
};
};

try {
xhr.withCredentials = true;
} catch(e) {};

xhr.onload = function (e) { handle_load('load')(e.target); };
xhr.onerror = function (e) { handle_load('error')(e.target); };
xhr.send();
};




W3C 服务端代码:


response.setHeader("Access-Control-Allow-Origin","xyz")
response.setHeader("Access-Control-Allow-Methods","get")



最后 我承认以下写的比我好多了

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors

http://www.w3.org/TR/cors/
CSRF(Cross-Site Request Forgery)是一种网络攻击方式,它利用用户已经在某个网站上登录的身份,在用户不知情的情况下对其他网站进行恶意操作。JSONPJSON with Padding)是一种跨域请求的解决方案之一。JSONP通过在前端页面动态生成<script>标签,将请求发送到其他域名的服务器,并在响应中返回一个回调函数的调用。这样,前端页面就可以通过回调函数获取到跨域请求的数据。 从引用中可以了解到,JSONP的兼容性较好,但它只支持GET请求,不支持POST请求。而CORS(Cross-Origin Resource Sharing)是W3C标准定义的跨域Ajax请求的解决方案,它支持GET和POST请求,但可能存在兼容性问题。 在引用中的示例代码中,可以看到JSONP的具体实现方式。通过在服务器端创建一个路由,接收客户端通过查询字符串传递的callback参数。然后服务器会构造一个对象,并将该对象转换成字符串形式返回给客户端,并在返回的数据前面添加回调函数的调用。 综上所述,JSONP是一种通过动态生成<script>标签实现跨域请求的临时解决方案,而CSRF是一种网络攻击方式。两者并没有直接的联系。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CORS和JSONP的区别,如何解决跨域问题?](https://blog.csdn.net/SunFlower914/article/details/120691847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值