首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么浏览器不允许CORS,而服务器端脚本可以很容易地做到这一点?

为什么浏览器不允许CORS,而服务器端脚本可以很容易地做到这一点?
EN

Stack Overflow用户
提问于 2016-02-10 16:19:15
回答 1查看 765关注 0票数 0

在同源策略下,web浏览器允许包含在第一网页中的脚本访问第二网页中的数据,但前提是两个网页具有相同的源。

但我没有领会到它的本质。如果我无法从浏览器发出跨域请求,我将通过我的PHP脚本发出请求。它会工作得很好。难到不是么?

因此,不要执行以下操作:

代码语言:javascript
运行
复制
var xhr = new XMLHttpRequest();
var url = "https://www.google.com/finance/converter?a="+amount+'&from='+from+'&to='+to;
if(xhr) {
    xhr.open('GET', url, true);
    xhr.onload = function() {
        // Handle
    };
    xhr.send();
}

这将导致:

代码语言:javascript
运行
复制
XMLHttpRequest cannot load https://www.google.com/finance/converter?foo. No
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin abc.com is therefore not allowed access.

我可以通过我自己的php脚本发送一个ajax请求,如下所示:

代码语言:javascript
运行
复制
$.ajax({
    method: "GET",
    url: "./bin/http/CimmClient.php",
    dataType: 'html',
    data:{
        a: amount,
        from: from,
        to: to
    }       
})
.done(function(data, textStatus, jqXHR ){
  // Handle
})

这个可以很好的工作。PHP只向另一个域发送HTTP请求,然后将响应发送回javascript。

那么,原则上的区别是什么呢?为什么浏览器会阻止发送跨域的HTTP请求,而php/java/其他浏览器可以很容易地允许这样做?

EN

回答 1

Stack Overflow用户

发布于 2016-02-10 16:27:01

实现这些限制并不是为了防止您使用任何类型的服务,而是为了防止您不知道的恶意代码代表您执行操作。

所以,如果你愿意,你可以获得数据--例如使用服务器端脚本,这是可以的。但是,如果您将恶意网页加载到浏览器中,或加载被恶意软件感染的网页,其脚本将无法代表您执行操作并向第三方服务发送请求。

可以说,这种跨源访问是有合法用例的,但互联网上的安全是一件大事,它被考虑在开发人员的舒适感之前。

例如,假设您有一家网上银行,它使用cookie存储有关用户打开的身份验证会话的信息。你登录一家银行,检查你的账户。如果您在浏览器中将此选项卡保持打开状态,则会访问恶意网站。该网站使用一个简单的GET请求将Ajax发送到银行,要求提供交易列表。您的浏览器将调用GET请求并向银行发送会话cookie,银行将回复有关您帐户的敏感信息。然后,恶意脚本将数据上载到其服务器。一旦跨域访问被禁止,该场景将不再存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35309953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档