【发布时间】:2016-02-12 20:33:12
【问题描述】:
我正在尝试为网站提供安全的文件服务功能。我考虑了几个适合我当前模型的选项:
- 使用 XMLHttpRequest 检索文件内容,然后根据文件类型和用户偏好提供显示或另存为功能。
我了解如何使用二进制 Ajax 功能(blob、arraybuffer)来检索二进制文件,并且我已经看到 this shim 用于实现 HTML5 另存为功能,但我担心这种技术的性能:大文件。我还没有测试过,但我不认为使用这种技术下载 1GB+ 文件的性能会很好。
- 在链接上设置 HTTP 标头(见下文),这样我就可以在标头中传递身份验证令牌,但仍然像正常下载一样将文件直接提供给浏览器,而不是通过 XMLHttpRequest 检索内容的麻烦.
我更喜欢这种方法,因为它非常适合当前的身份验证框架,并且只需要很少的额外代码,但据我所知,只有 Firefox 支持我想做的事情。
Firefox 能够在没有由 JavaScript 代码使用 httpChannel 显式发起的网络调用中设置 http 标头:Firefox HTTP channels。有谁知道其他浏览器是否支持此功能?我希望能够设置一个链接,例如:
window.location.href = 'blah';
并让代码观察设置自定义 HTTP 标头的网络流量:
httpChannel.setRequestHeader("X-Hello", "World", false);
虽然 Firefox 可以做到这一点非常酷,但我需要一个跨浏览器的解决方案。我看过这个问题:
Setting request header, in a URL
这基本上是我想要做的,但唯一推荐的解决方案是设置会话 cookie,我没有使用它。
【问题讨论】:
-
这听起来像是一个 XY 问题。你的用例是什么?
-
也许是的,让我重申一下这个问题。
-
正常登录只允许认证用户下载有什么问题?
-
@PeeHaa 就是这样做的,但是当前的身份验证机制在每个请求的 http 请求标头中使用一个令牌,所以我要么需要使用现有的机制,它可以与其中一个一起使用我正在研究两个选项,或者使用其他功能扩展当前机制。
标签: javascript jquery