设置HTTP标头以处理浏览器生成的请求?

8

我有一台使用HTTP基本身份验证的服务器,同时我也有一个客户端脚本,知道上述HTTP服务器的用户名和密码。我使用XHR请求,并使用其setRequestHeader方法来设置授权头,这样可以避免浏览器弹出默认的HTTP登录对话框。

request.setRequestHeader('Authorization', authInfo);

这是 AJAX 请求的正常情况,但如果我想从所提到的服务器下载文件,并且被迫不使用 AJAX,而是使用类似 JavaScript 中的 window.location.href 这样的东西,其中浏览器自己创建请求。由于此请求将不包括 Authorization 头部(浏览器会为每个请求自动添加Authorization头部,仅在提示登录对话框并保存实际服务器的登录信息的base64后才这样做),浏览器将提示HTTP登录对话框,而我想避免这种情况。那么有没有一种方法可以设置浏览器创建的非 AJAX 请求的头部呢?
1个回答

2
您尝试过在URL中设置用户名和密码吗?
location.href = 'http://user:password@example.com/path/to/download';

我认为这在大多数浏览器中都可行,但是遗憾的是除了Internet Explorer 7+

或者,如果您可以访问服务器,则可以在服务器端放置一个使用cookie进行身份验证的脚本。可以使用JavaScript设置Cookie。


请注意,身份验证 cookie 可能会被滥用以进行 CSRF 攻击。 - user123444555621
谢谢,这个有效。不幸的是,我在服务器端没有脚本解释器,所以我不能使用第二种方法。 - ggat
关于第一种方法,我有一个提示,是否有一种方法可以通过base64编码或其他方式传递用户:密码。 我认为可以通过在URL中发送例如base64编码的用户和密码,在服务器端解码该字符串并重定向到带有Apache的新URL来完成此操作。由于这是下载,因此用户将不会在浏览器地址栏中看到解码的URL。但是我想知道是否有本地方法可以做到这一点。 - ggat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接