在同源策略下,web浏览器允许包含在第一网页中的脚本访问第二网页中的数据,但前提是两个网页具有相同的源。
但我没有领会到它的本质。如果我无法从浏览器发出跨域请求,我将通过我的PHP
脚本发出请求。它会工作得很好。难到不是么?
因此,不要执行以下操作:
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();
}
这将导致:
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请求,如下所示:
$.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/其他浏览器可以很容易地允许这样做?
发布于 2016-02-10 16:27:01
实现这些限制并不是为了防止您使用任何类型的服务,而是为了防止您不知道的恶意代码代表您执行操作。
所以,如果你愿意,你可以获得数据--例如使用服务器端脚本,这是可以的。但是,如果您将恶意网页加载到浏览器中,或加载被恶意软件感染的网页,其脚本将无法代表您执行操作并向第三方服务发送请求。
可以说,这种跨源访问是有合法用例的,但互联网上的安全是一件大事,它被考虑在开发人员的舒适感之前。
例如,假设您有一家网上银行,它使用cookie存储有关用户打开的身份验证会话的信息。你登录一家银行,检查你的账户。如果您在浏览器中将此选项卡保持打开状态,则会访问恶意网站。该网站使用一个简单的GET请求将Ajax发送到银行,要求提供交易列表。您的浏览器将调用GET请求并向银行发送会话cookie,银行将回复有关您帐户的敏感信息。然后,恶意脚本将数据上载到其服务器。一旦跨域访问被禁止,该场景将不再存在。
https://stackoverflow.com/questions/35309953
复制相似问题