视频和字幕·直接媒体下载器
为什么 CORS 可以阻止浏览器中的直接下载,以及这意味着什么
· 工作原理
科尔斯 http 下载
仅浏览器下载程序位于同源策略内。这篇文章解释了什么是 CORS,为什么有些主机允许获取而其他主机不允许,以及为什么没有中继服务器的工具无法解决它。
该链接在新选项卡中有效,但在工具中失败 - CORS 错误给用户带来的难题
在地址栏中输入播客附件时可能会播放,但当页面尝试使用 Fetch 读取它时会失败。导航和脚本阅读是不同的浏览器功能。第一个显示资源;第二个可以将其字节暴露给在另一个源上运行的代码。
Direct Media Downloader 需要第二种能力,因为它读取响应块、报告进度、构建 Blob 并提供命名保存。当媒体主机未选择跨域读取时,浏览器会阻止 JavaScript 接收响应,即使普通导航可能仍然有效。同样的区别解释了为什么将地址复制到另一个应用程序可以产生不同的结果,而两个应用程序都没有更改远程文件。
一段中的同源策略 - 为什么 toolacre.com 上的页面无法自由读取从另一个源提供的字节
源组合了方案、主机名和端口。因此,由 ToolAcre 提供的页面和由发布商 CDN 提供的文件通常具有不同的来源。同源策略可防止一个源的脚本自由读取另一个源的响应,从而保护通过环境浏览器访问暴露的数据。
此限制是由浏览器强制执行的,而不是由下载器中发明的警告强制执行的。它在应用程序代码可以检查受保护的标头或主体块之前应用。源主机可能仍会收到请求,因此阻止读取绝不能被描述为“未联系任何内容”。原始边界适用于可读响应,而不仅仅是文件扩展名,因此明显的 `.mp3` 后缀不会为页面脚本授予特殊豁免。
Access-Control-Allow-Origin 的作用 — 文件的主机(而不是工具)如何决定浏览器是否可以移交字节
远程服务器可以通过返回适当的 `Access-Control-Allow-Origin` 标头来选择加入。该决定属于文件主机的配置。 ToolAcre 无法将标头添加到其他人的响应中,并且请求选项无法授予接收服务器保留的权限。
宽松的标头允许浏览器公开对页面的响应;它不证明版权、安全性或媒体质量。同样,缺少标头并不能证明 URL 已损坏。这仅意味着该跨域脚本缺乏读取服务器返回内容的权限。主机管理员应该测试他们打算支持的确切请求来源和方法,而不是盲目地将许可标头添加到整个存储命名空间。
被阻止的跨源读取以及脚本为何没有收到可保存的响应
下载程序使用普通的 CORS 模式 Fetch 而不是 `no-cors`。在拒绝跨源读取时,Fetch 会拒绝,并且应用程序代码既不会收到可用的标头,也不会收到正文。该工具报告组合的 `CORS_OR_NETWORK` 类别,因为浏览器故意不透露足够的详细信息来区分 CORS 和每次传输故障。
不透明响应属于显式 `no-cors` 请求,但该模式无法解决此任务:JavaScript 无法检查不透明主体并将其转换为预期的 Blob。因此,实现会诚实地失败,而不是获取不可读的响应并假装它可以保存它。由于应用程序永远不会获取这些隐藏字节,因此它无法真实计算进度、从受保护的标头推断文件名或从中创建有用的对象 URL。
工作示例:在网络面板中读取失败的请求 - 发现丢失的标头并确认没有联系中继服务器
打开“网络”面板,保留日志,然后按一次“检查链接”。尝试的 HEAD 行标识目标并可能显示浏览器的 CORS 诊断。检查响应标头(如果可用);缺少允许标头解释了为什么页面代码没有收到广告的大小或 MIME 类型。
失败的检查已经证明尝试了真正的请求。没有携带粘贴的 URL 的 ToolAcre API 行,也没有第二个中继请求。如果主机不太允许 HEAD,下载的行为可能仍会有所不同,因为它使用 GET,但两条路径都不会默默地切换体系结构。控制台措辞因浏览器而异,因此请保留失败的行和标题证据,而不是依赖于某个供应商的操作报告措辞。
为什么该工具不绕过它进行路由 - 代理意味着将您的链接发送到服务器,而这正是该工具承诺不会做的事情
代理可以在服务器端获取文件并从同源端点返回它,从而避免浏览器的跨源读取。它还会向该操作员公开链接和每个中继字节,产生带宽,并创建任意获取表面。 ToolAcre 故意没有这样的端点。
界面建议的后备方案是浏览器的本机“另存为”操作链接(如果可用)。这是导航或下载处理而不是页面脚本读取。该建议不会削弱主机策略、验证访问者身份或将受保护的流转换为直接文件。这种架构上的拒绝还可以防止 ToolAcre 积累副本、访问日志或出站获取权限,而仅仅是为了将浏览器拒绝变成明显的成功。
这不包括什么 - CORS 与 403、登录墙或过期的签名 URL 不同
CORS 故障不是 HTTP 403,尽管两者都可以停止工作流程。 403 是主机选择的响应状态;过期的签名可能会导致这种情况。登录墙需要此工具忽略的凭据。网络中断、DNS 故障和证书问题都可能导致浏览器普遍拒绝 Fetch。
因此,诊断应该同时使用网络和控制台面板,而不是将每个故障都视为丢失的标头。当可读响应到达时,ToolAcre 会报告已知的 HTTP 状态,但它拒绝猜测浏览器何时仅提供传输型异常。将这些类别分开可以指导正确的补救措施:为授权的公共对象配置 CORS、刷新过期的链接、通过提供程序登录或修复连接。
要点:CORS 是主机端决定 — Direct Media Downloader 如何诚实地报告它,而不是默默地回退到服务器
CORS 在媒体主机上控制。仅限浏览器的下载程序可以服从该选择,对其进行解释,然后停止;它不能覆盖客户端代码的选择。这个边界之所以不方便,正是因为它阻止了任意页面成为通用的跨站点阅读器。
使用主机提供的下载控件,请求启用 CORS 的授权文件,或在适当时使用本机保存链接。 Direct Media Downloader 通过揭露拒绝并保留直接浏览器到主机的路径来履行其承诺,而不是通过将服务器隐藏在更成功的按钮后面。因此,成功的结果必须来自合作主机或不同的合法浏览器设施,而不是来自抑制错误文本同时保留相同的拒绝读取。