为什么我需要 CORS 标头来请求可下载的链接

Why do I need CORS header to request a downloadable link?

本文关键字:请求 下载 链接 CORS 为什么      更新时间:2023-09-26

我有一个链接,允许我在单击文件时下载文件。我没有下载,而是尝试通过一个简单的请求访问它,但是我遇到了 CORS 问题。我无法访问服务器端,因此到目前为止我尝试的所有方法都失败了。如果我理解正确,到目前为止我找到的所有建议都需要我控制服务器(我可能弄错了,但据我所知,服务器端需要有一个包含我的域的 CORS 标头或有一个 jsonp 函数被调用)。

这是否意味着我无法读取和解析已经可下载的文件?如果是,它有什么意义,因为当我单击链接时该文件是公开的并且已经可以下载。由于我能够手动获取文件,因此不应该使用代码访问它吗?你能建议我任何解决方案或给出一些我可以做的东西吗?为什么下面的代码不能像手动单击浏览器那样工作?

var urlString = "http://abc.def.com/download?fileid=123&entity_id=123&sid=123";
$.get(urlString, function(data, status){
alert("Data: " + data + "'nStatus: " + status);});

您可以通过手动单击指向它的链接来下载外部脚本,因为您手动单击了它!浏览器知道您授权访问该 URL,因为您单击了指向该 URL 的链接。但是,如果一些JavaScript在后台访问该URL,浏览器就无法确定用户对此感到满意。

你在想"我只是想下载一个无辜的文件,为什么浏览器不信任我??但让我们考虑一个更可怕的场景。比方说,你的JavaScript不是试图访问http://innocentsite.com/download,而是试图访问https://bankofamerica.com/initiateMoneyTransfer?recipient=OE1&amount=10000。用户甚至不知道,自从他们登录 bankofamerica.com 以来,他们只是让您向自己发送了 10,000 美元。

现在,显然美国银行(或任何其他受人尊敬的银行)不允许像这样发起10,000美元的转账。但希望这个例子能传达这个想法——网页能够向其他域发出HTTP请求是非常危险的。这就是需要 CORS 标头的原因。


脚注:如果您托管自己的 Web 服务器,则可以考虑设置代理。您可以在您的网站上设置一个网址,该网址会自动从其他网站检索文件,并将其投放到您的网域中。这样,您可以检索文件,而无需其他网站设置 CORS 标头。