[英]How to get only response headers from XMLHttpRequest
是否可以在不下載文件數據的情況下僅從XMLHttpRequest
獲取響應標頭?
如果您發出請求的服務器支持該方法,聽起來您想要的是發出 HTTP HEAD 請求。 請參閱HTTP 規范。
例如比較curl -v -X GET https://github.com
和curl -v -X HEAD https://github.com
。
首先,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
執行此操作。
有關更多詳細信息,請參閱https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState和https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods 。
使用 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())
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.