在 HTML 页面上,在单击图像 ("img") 或锚 ("a") 标记的链接时,我想为 GET 请求添加自定义标头。这些链接通常用于下载动态内容。这些标头可以是 SAML 标头或自定义应用程序特定标头。
是否可以通过 JavaScript 添加这些自定义标头?或者如果我通过 XMLHttpRequest 添加这些,我如何实现下载功能?
此要求仅适用于 IE6 或 7。
在 HTML 页面上,在单击图像 ("img") 或锚 ("a") 标记的链接时,我想为 GET 请求添加自定义标头。这些链接通常用于下载动态内容。这些标头可以是 SAML 标头或自定义应用程序特定标头。
是否可以通过 JavaScript 添加这些自定义标头?或者如果我通过 XMLHttpRequest 添加这些,我如何实现下载功能?
此要求仅适用于 IE6 或 7。
我认为完成它的最简单方法是使用查询字符串而不是 HTTP 标头。
从浏览器内部向请求添加标头的唯一方法是使用 XmlHttpRequest setRequestHeader 方法。
将此与“GET”请求一起使用将下载资源。诀窍是以预期的方式访问资源。从表面上看,您应该能够允许 GET 响应在短时间内可缓存,因此导航到新 URL 或使用 src url 创建 IMG 标签应该使用来自先前“GET”的缓存响应。然而,这很可能会失败,尤其是在 IE 中,在涉及缓存的情况下,IE 本身可能有点规律。
最终我同意 Mehrdad,使用查询字符串是最简单和最可靠的方法。
另一个奇怪的替代方法是使用 XHR 向 URL 发出请求,表明您打算访问资源。它可以使用会话 cookie 进行响应,该 cookie 将由对图像或链接的后续请求携带。
2021 年,这可以通过Service Workers 实现。
首先,你必须在你的页面上注册一个 Service Worker。
// index.html
window.addEventListener('load', function () {
navigator
.serviceWorker
.register('/service-worker.js');
});
在 Service Worker 中,通过调用该WindowOrWorkerGlobalScope.fetch()
方法来捕获、修改和转发请求。
// service-worker.js
self.addEventListener('fetch', function (event) {
event.respondWith(async function () {
let headers = new Headers()
headers.append("X-Custom-Header", "Random value")
return fetch(event.request, {headers: headers})
}());
});
请注意,某些 Web 浏览器不会在开发者控制台中显示修改后的请求。在这种情况下,可以使用 tcpdump、Wireshark 等工具或在服务器日志中观察请求。
如前所述,最简单的方法是使用查询字符串。
但如果您不能,出于安全原因,您应该考虑使用 cookie。