android - 如何在android上使用OkHttp的ETag和If-None-Match

标签 android okhttp etag last-modified if-none-match

我在我的应用程序中使用了 OkHttpClient (v3.0.1),但是 ETag 和 If-None-Match 不工作。

例如:

首先 GET http://112.4.19.67/task/imags_avatar/20130607165126605.png

在响应中,我得到 ETag 和 Last-Modified。

要求:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

回复:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515d9572"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:05 GMT
X-Varnish: 3684240013 3683622711
Age: 1313
Via: 1.1 varnish
Connection: keep-alive

第二 GET 相同的 url : http://112.4.19.67/task/imags_avatar/20130607165126605.png

我想我可以在请求中看到 If-None-Match。但它不存在。

要求:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

响应:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515504c0"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:26 GMT
X-Varnish: 3389168698 3388862573
Age: 642
Via: 1.1 varnish
Connection: keep-alive

我的代码

    File file = getCacheDir();
    Cache cache = new Cache(file, CACHE_SIZE);

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.cache(cache);
    OkHttpClient client = builder.build();

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

在此先感谢您的帮助。

最佳答案

您是否正在阅读第一个请求的完整响应正文? OkHttp 在您读完正文之前不会将响应写入缓存。

关于android - 如何在android上使用OkHttp的ETag和If-None-Match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218456/

相关文章:

java - 处理 FLAG_ACTIVITY_NEW_TASK 的 onNewIntent

Android 将图片发布到 facebook 墙而不是图库相册

javascript - 有人知道如何检测 Nativescript 的方向变化吗?

java - OKHttp句柄302

java - 未知主机异常 : name or service not known

c# - 如何在消息响应中返回有效的 ETag?

android - Android 上的本地设备组的 Google Cloud Messaging (GCM) 给出 HTTP 错误代码 401

android - 当我尝试使用 Gson 从 Json 获取 responseObj 时出现错误。致命异常 : OkHttp Dispatcher NumberFormatException: Invalid double: ""

linux - 多缓冲区可以有自己的 etags 标记堆栈吗?

ruby-on-rails - Ruby on Rails,如何禁用/关闭 ETag