2015-10-13 114 views
6

我需要使用OkHTTP庫檢查HTTP request的響應頭。在加載數據之前,我需要檢查它是否是上次更新時間。問題在於響應正文約爲2 MB,所以我只需要獲得Last-Modified標題。是否可以只加載沒有響應主體的響應頭來提高程序的RESTful動作的速度?獲取響應頭OkHttp

回答

10

您可以發送僅檢索標頭的HTTP HEAD請求。你只需要檢查你的服務器應用程序是否支持HEAD請求。

HEAD方法與GET相同,只是服務器不能在響應中返回消息主體 。 HTTP頭中包含 的元信息響應於HEAD請求應該與響應GET請求發送的信息相同 。此方法可用於獲取有關 請求隱含的實體的元信息,而不會傳輸實體主體本身。此方法是 經常用於測試超文本鏈接的有效性,可訪問性, 和最近的修改。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

爲OkHttp實施例:

String url = ... 
Request request = new Request.Builder().url(url).head().build(); 
+0

你能寫一個我怎麼用OkHttp做的例子嗎?我無法在javadoc中找到操作它的方法((( – Near1999

+0

@ Near1999我在我的答案中更正了Javadoc鏈接,現在它指向'Request.Builder'中的'head()'方法。這有幫助嗎? – wero

+0

I知道如何構建請求,我不知道如何構建** HEAD請求**,並且javadoc沒有幫助我(我知道如何爲請求添加標頭以及如何讓它們響應,但我不'如果你知道怎麼做,請發佈一個代碼示例 – Near1999

4

響應體被流傳輸,這樣就可以使經常請求,讀出的標頭,然後再決定是否要消耗體內。如果你不想要身體,你可以close()它沒有太多的浪費。

服務器爲服務可能會被放棄的響應的成本很低。但總體成本將低於制定HEAD,然後GET請求,除非您希望放棄大部分請求(例如> 90%)。

+0

所以,當我調用** response.body()**的時候,請求只會開始下載? – Near1999

+0

_Almost_。它會在此之前下載最初的幾個KiB,但在您調用'response.body()'之前它不會下載太多內容。 –