簡體   English   中英

如何僅從 XMLHttpRequest 獲取響應標頭

[英]How to get only response headers from XMLHttpRequest

是否可以在不下載文件數據的情況下僅從XMLHttpRequest獲取響應標頭?

如果您發出請求的服務器支持該方法,聽起來您想要的是發出 HTTP HEAD 請求。 請參閱HTTP 規范

例如比較curl -v -X GET https://github.comcurl -v -X HEAD https://github.com

另請參閱Javascript/Ajax 中的 HTTP HEAD 請求?

首先,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/readyStatehttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM