Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅从XMLHttpRequest获取响应头_Javascript_Http Headers_Xmlhttprequest - Fatal编程技术网

Javascript 如何仅从XMLHttpRequest获取响应头

Javascript 如何仅从XMLHttpRequest获取响应头,javascript,http-headers,xmlhttprequest,Javascript,Http Headers,Xmlhttprequest,是否可以只从XMLHttpRequest获取响应头而不下载文件数据?如果您请求的服务器支持该方法,听起来您想要的是发出HTTP头请求。看 例如,比较curl-v-xget的输出https://github.com和卷曲-v-X头部https://github.com 另请参见使用JavaScript(如问题中所述),只需通过AJAX使用头请求: var xhr = new XMLHttpRequest(); var method = 'head'; var url = 'https://www.

是否可以只从
XMLHttpRequest
获取响应头而不下载文件数据?

如果您请求的服务器支持该方法,听起来您想要的是发出HTTP头请求。看

例如,比较
curl-v-xget的输出https://github.com
卷曲-v-X头部https://github.com

另请参见

使用JavaScript(如问题中所述),只需通过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())
 }
}

首先,约翰的回答解决了这个问题,但由于没有足够的解释,它被否决了

因此,这里有一个解释,以及一个额外的位,您可以添加以及修复

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

功能检查状态(url){
返回新承诺((解决、拒绝)=>{
const request=new XMLHttpRequest();
request.open('HEAD',url,true)
request.onreadystatechange=()=>{
如果(request.readyState>=2){
解决(请求状态)
请求。中止()
}
}
request.onerror=(e)=>{
拒绝(e)
}
请求发送()
})
}
这之所以有效,有两个原因

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

第二个原因是
readyState
状态

0 = UNSENT
1 = OPENED
2 = HEADERS_RECEIVED
3 = LOADING
4 = DONE
在状态
2
下,可以查看标题。这意味着您可以返回您需要的任何内容和/或中止请求的其余部分,从而阻止下载任何进一步的数据

值得注意的是,您还可以在阶段
3
中使用
request.onprogress
执行此操作


有关详细信息,请参阅和。

谢谢!这正是我所需要的。对于用服务器端答案回答客户端问题,我投了反对票。我同意,在这里还可以帮助您展示如何从XHR响应对象获取标题,但是对于OPs问题,我相信答案基本上是正确的。这里需要的HTTP操作是HEAD请求。然而,我可能误解了这个问题。@John-不知道你为什么说这是一个服务器端解决方案,因为解决方案是根据下面的答案发出HEAD请求。Stephan只是用
curl
而不是浏览器代码来演示这一点。但是curl就像一个浏览器一样是一个客户端,这个答案在4年前帮助我解决了这个问题,现在似乎还没有一个客户端的解决方案。如果你有一个,请分享它,我会接受你的答案。当然,这会导致浏览器也从服务器获取整个HTTP响应。这并不能回答老年退休金计划的问题。它简单地向他们展示了如何从JS中的响应对象获取头数据。最初的问题是在不获取内容的情况下获取响应标题对不起,我不确定您的意思,您是说正确的答案是根据您的答案使用HTTP POST吗?或者读者应该理解,如果他们想向服务器表明他们也不想要完整的响应正文,那么应该将上面代码中的HTTP
方法
更改为
head
?在您的示例中,仅仅发布仍将返回一个主体(假设服务器为给定端点创建一个主体)。然而,HEAD请求的语义指示服务器不要使用body响应(假设端点支持HEAD)。如果解释清楚的话,我很乐意删除否决票。我错过了被设置为post的标题。>\uuu>试着在你的回答中添加一些描述。我没有得到回复中的标题。