Ajax和状态码302

3

我遇到了一个关于ajax(和/或jQuery ajax)和状态码302的问题。

这是我的尝试:

var xhr = new XMLHttpRequest();
xhr.open("GET", 'some_page_that_I_cant_change.php');
xhr.onreadystatechange = function(){
    console.log(xhr.readyState, xhr.status);
};
xhr.send(null);

some_page_that_I_cant_change.php 会重定向到一个带有 302 状态码的 .bin 文件。我不想下载这个文件,我只是想知道它的路径。例如:

./some_page_that_I_cant_change.php
./path/to/bin/file.bin << I wan't only this path as string

问题在于Chrome会自动重定向到文件,但没有告诉我脚本路径。有没有解决方法?
3个回答

2
如果您使用 HEAD 请求而不是 GET 请求,我认为这将实现您想要的效果。您应该只在响应中看到头部信息,没有响应正文(即,不会下载 .bin 文件)。

谢谢。但是它在Chrome上不起作用。它继续下载文件。但是,我尝试改为"async:false"并有一个惊喜:文件没有被下载,而是抛出了一个异常“NETWORK_ERR: XMLHttpRequest Exception 101”。我无法在jsFiddle上重现,但我想要的标题也无法获取,只有简单的标题(代码在这里)。 - David Rodrigues
这太荒谬了。Chrome不应该使用HEAD调用下载资源 :-( 老实说,我没有其他想法,抱歉。 - Platinum Azure
没问题。无论如何感谢你。我也升级了,因为可以帮助有类似问题的人。 - David Rodrigues

0

0
总之,我认为由于HTTP协议的原因,你无法这样做。
HTTP协议([1]:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)规定302表示重定向URI,浏览器会遵循。所以,JavaScript无法获取重定向响应,只能获取最终响应。
因此,您必须通过响应正文获取路径。

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