前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨域网络资源文件下载

跨域网络资源文件下载

作者头像
十玖八柒
发布2022-08-01 09:27:26
1.1K0
发布2022-08-01 09:27:26
举报
文章被收录于专栏:ahzoo.cn的博客分享

问题

正常情况下是无法发送跨域请求下载文件的。 以下载语雀为例:可以看到直接访问下载地址会报跨域错误

图片
图片
图片
图片

解决

这个时候我们就可以通过nginx配置代理转发请求完成下载:

代码语言:javascript
复制
location ^~ /yuque/ {
    proxy_pass https://app.nlark.com/yuque-desktop/;
}

说明:当我们像本地发送/yuque/的请求时,nginx会转发请求(注意:末尾必须要加/不然就是代理请求,加了后才是转发请求),会将/yuque/转发成下面的https://app.nlark.com/yuque-desktop/

然后我们重新写下载请求:

代码语言:javascript
复制
var xhr = new XMLHttpRequest();
xhr.open("GET", "/yuque/1.1.4/Yuque-1.1.4.exe", true);
xhr.send();

这次我们不直接访问语雀下载地址了,而是访问我们的本地地址,然后nginx会将我们的请求进行转发,将/yuque/转发为https://app.nlark.com/yuque-desktop/,那么转发后的请求就变成了https://app.nlark.com/yuque-desktop/1.1.4/Yuque-1.1.4.exe。由于我们并没有直接对下载地址进行请求,而是请求的本地地址,通过nginx进行代理转发请求,因此自然不存在跨域问题(不理解的话,可以看我之前写的有关nginx反向代理的文章)

图片
图片

后记

由于nginx不是通过反向代理的而是进行转发代理请求的,这个过程中资源是经过了一次nginx服务器的,然后再由nginx将资源发送给请求方,因此这个过程是需要消耗nginx所在服务器流量的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 解决
  • 后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档