是否可以在不下载文件数据的情况下仅从XMLHttpRequest
获取响应标头?
答案 0 :(得分:3)
如果您要求的服务器支持该方法,则听起来您想要发出HTTP HEAD请求。请参阅HTTP spec。
例如,比较curl -v -X GET https://github.com
和curl -v -X HEAD https://github.com
的输出。
答案 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/readyState和https://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())
}
}