是否有可能XHR HEAD请求不遵循重定向(301 302)

ant*_*onj 23 javascript ajax google-chrome xmlhttprequest

是否可以发送xhr HTTP HEAD请求以仅获取第一个请求的标头响应,而不是像重定向那样自动跟随301,302?我只对获取网址的新位置感兴趣.例:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(data) {
    if (xhr.readyState == 4) {
        if (xhr.status == 301 || xhr.status == 302) {
            // Get new location url don't GET it
        }
    }
};
xhr.open('HEAD', url, true);
xhr.send();
Run Code Online (Sandbox Code Playgroud)

http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send-method似乎指定的请求应遵循,是有没有办法制止?

Nic*_*ver 18

没有,这不是暴露的行为,你可以停止.

这是因为您已经链接的规范,指定的行为是XmlHttpRequest应该透明地遵循重定向......不幸的是,并且不是以您可以阻止的方式.

这种方式是尝试让事情变得更容易,如果资源移动等等......但是当它被设计并且规范布局时,所有这些重定向服务都不在那里.没有强烈需要任何其他行为或能力来阻止它,我认为有很多重定向到网络上我们不会看到添加的能力,但谁知道每个浏览器何时会支持它.


Dan*_*llo 6

W3C规范要求自动跟踪重定向,正如@Nick在另一个答案中建议的那样.但是,W3C正在考虑禁用重定向的属性,以用于此规范的未来版本:

此规范不包括为此规范的未来版本考虑的以下功能:

  • load event和onload属性;
  • 错误事件和onerror属性;
  • progress事件和onprogress属性;
  • 中止事件和onabort属性;
  • 已经建议定时器,也许是ontimeout属性;
  • 禁用以下重定向的属性;
  • responseXML用于text/html文档;
  • 跨站点XMLHttpRequest;
  • responseBody处理字节流;
  • overrideMimeType来修复MIME类型;
  • getRequestHeader()和removeRequestHeader().

但是,在所有浏览器都实现之前,我不会屏住呼吸.您可能希望使用服务器端代理来处理此问题.只需编写一个简短的脚本,HEAD在您喜欢的服务器端语言/框架中执行请求,然后使用Ajax查询此服务.您还可以通过代理向第三方域请求作为积极的副作用.