如何只从XMLHttpRequest获取响应头

时间:2014-02-12 08:12:31

标签: javascript http-headers xmlhttprequest

是否可以在不下载文件数据的情况下仅从XMLHttpRequest获取响应标头?

3 个答案:

答案 0 :(得分:3)

如果您要求的服务器支持该方法,则听起来您想要发出HTTP HEAD请求。请参阅HTTP spec

例如,比较curl -v -X GET https://github.comcurl -v -X HEAD https://github.com的输出。

另见HTTP HEAD Request in Javascript/Ajax?

答案 1 :(得分:1)

首先,约翰(John)的回答解决了此问题,但由于没有足够的解释,因此被否决了。

因此,这里是带有说明的修复程序,以及您可以添加的其他内容。

客户端解决方案如下(我以状态码为例):

function checkStatus(url) {
  return new Promise((resolve, reject) => {
    const request = new XMLHttpRequest(); 
    request.open('HEAD', url, true)

    request.onreadystatechange = () => {
      if (request.readyState >= 2) {
        resolve(request.status)
        request.abort()
      }
    }

    request.onerror = (e) => {
      reject(e)
    }

    request.send()
  })
}

之所以起作用,是因为两个原因。

首先,我们将HEAD作为方法而不是GET传入,这本身就足够了,但是如果您想做更多的事情,可以继续讲第二个原因。

之所以起作用的第二个原因是由于readyState状态。

0 = UNSENT
1 = OPENED
2 = HEADERS_RECEIVED
3 = LOADING
4 = DONE

在状态2下,可以查看标题了。这意味着您可以随后返回所需的任何内容和/或中止请求的其余部分,以防止进一步的数据被下载。

值得一提的是,您还可以在阶段request.onprogress使用3进行此操作。

有关更多详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyStatehttps://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

答案 2 :(得分:-1)

Using JavaScript (as specified in the question) simply use a head request via AJAX:

var xhr = new XMLHttpRequest();
var method = 'head';
var url = 'https://www.example.com/';
xhr.open(method,url,true);
xhr.send(null);

xhr.onreadystatechange = function()
{
 if (xhr.readyState === 4)
 {
  console.log(xhr.getAllResponseHeaders())
 }
}