为什么浏览器不允许 CORS,而服务器端脚本可以轻松做到这一点
Why does the browser not allow CORS when server side script could easily do this?
在同源策略下,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/其他人很容易允许这样做?
实施这些限制不是为了阻止您使用任何类型的服务,而是为了防止您不知道的恶意代码代表您采取行动。
因此,如果您愿意,您可以获取数据 - 例如使用服务器端脚本,这没关系。但是,如果您将恶意网页加载到浏览器或被恶意软件感染的网页,则其脚本无法代表您操作并向第三方服务发送请求。
可以说,这种跨源访问有合法的用例,但互联网上的安全性是一件大事,在开发人员的舒适之前就考虑了它。
例如,假设您有一个使用 Cookie 存储用户打开的经过身份验证的会话的信息的网上银行。您登录银行并检查您的帐户。您在浏览器中打开此选项卡,然后访问恶意网站。该网站将Ajax发送到银行,要求使用简单的GET请求提供交易列表。您的浏览器将调用GET请求并向银行发送会话cookie,银行将回复有关您帐户的敏感信息。然后,恶意脚本将数据上传到其服务器。一旦禁止跨源访问,这种情况就不再可能。
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- gmap3如何做到这一点-它显示圆圈的任何事件
- 硒元素在这一点上是不可点击的
- JQuery是否有一个“;移动“;作用或者有没有一种更紧凑的方法来做到这一点
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- AngularJS:有没有比指定的方法更好的方法来实现这一点
- Mootorial在这一点上有多重要或过时
- Javascript递归函数引用了这一点
- 我想听听服务器上的更改,并相应地更新我的网页.我如何用Javascript做到这一点
- JavaScriptEs6在内部函数中引用了这一点
- js并在加载前编辑url-如何做到这一点
- 角度缩小2-有人成功做到这一点吗
- Javascript OOP-在异步回调中丢失了这一点
- 谷歌地图与方向 - 我可以在没有表单标签的情况下做到这一点吗?
- config.fullPage = true;在 ckEditor 内联模式下无法正常工作.如何实现这一点
- window.btoa( // here programcode // ) 如何做到这一点
- 如何在Jquery中实现这一点?(JS到Jquery)
- 如何优化这一点
- 为什么浏览器不允许 CORS,而服务器端脚本可以轻松做到这一点
- 添加脚本到我的模板动态-我可以做到这一点