是否可以仅从XMLHttpRequest
获取响应头而不下载文件数据?
是否可以仅从XMLHttpRequest
获取响应头而不下载文件数据?
curl -v -X GET https://github.com
和curl -v -X HEAD https://github.com
命令输出的结果。同时也可以参考JavaScript/Ajax里的HTTP HEAD请求。curl
而不是浏览器代码来演示。但是 curl 和浏览器一样是客户端。 - broofa使用JavaScript(如问题中所指定)通过AJAX发送head
请求:
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())
}
}
首先,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
时,头信息已准备就绪,这意味着您可以返回所需的任何内容和/或中止其余请求,以防止下载任何进一步的数据。3
中,您也可以使用request.onprogress
完成此操作。