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>试着在你的回答中添加一些描述。我没有得到回复中的标题。