获取响应头 OkHttp

8

我需要使用OkHTTP库检查HTTP请求的响应头。在加载数据之前,我需要检查它的最后更新时间。问题在于响应体大小约为2 MB,因此我只需要获取Last-Modified头信息。是否可以仅加载响应头而不加载响应体以提高程序RESTful操作的速度?

2个回答

13
您可以发送一个 HTTP HEAD 请求,仅检索标头。您只需要检查您的服务器应用程序是否支持 HEAD 请求。

HEAD 方法与 GET 方法相同,除了服务器不得在响应中返回消息正文外。响应的 HTTP 标头中包含的元信息应与响应 GET 请求时发送的信息相同。该方法可用于获取有关请求所暗示的实体的元信息,而无需传输实体正文本身。此方法通常用于测试超文本链接的有效性、可访问性和最近修改。
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)

OkHttp 的示例:

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

你能写一个OkHttp的示例吗?我在javadoc中找不到相关的方法。((( - Near1999
@Near1999 我在我的回答中更正了Javadoc链接。现在它指向了Request.Builder中的head()方法。这有帮助吗? - wero
我知道如何构建请求,但不知道如何构建HEAD请求,而且javadoc没有帮助我(我知道如何添加请求头,并在响应中获取它们,但我不知道如何仅从服务器获取头部而不下载主体。如果你知道,请发一段代码示例)。 - Near1999
2
@Near1999 添加了一个示例。 - wero

5
响应体是通过流传输的,因此你可以发送常规请求、读取头信息,然后决定是否使用响应体。如果你不需要响应体,你可以通过close()方法关闭它而不会浪费太多资源。
对于服务器来说,提供可能被放弃的响应会稍微增加一些成本。但总成本将低于先进行HEADGET请求,除非你预计放弃请求的比例很大(例如>90%)。

那么,当我调用 response.body() 时,请求的正文只开始下载了吗? - Near1999
“Almost”。在调用 response.body() 前,它会下载前几个 KiB,但不会下载太多。 - Jesse Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接