Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓存控制被忽略_Java_Http_Okhttp - Fatal编程技术网

Java 缓存控制被忽略

Java 缓存控制被忽略,java,http,okhttp,Java,Http,Okhttp,我目前正在使用改型和Okhttp,我正在尝试缓存一些GET响应。 我的代码是: OkHttpClient okHttpClient = new OkHttpClient(); File cacheDir = new File(System.getProperty("java.io.tmpdir"), "ddcache"); HttpResponseCache cache = new HttpResponseCache(cacheDir, 2024);

我目前正在使用改型和Okhttp,我正在尝试缓存一些GET响应。 我的代码是:

OkHttpClient okHttpClient = new OkHttpClient();
    File cacheDir = new File(System.getProperty("java.io.tmpdir"),
            "ddcache");
    HttpResponseCache cache = new HttpResponseCache(cacheDir, 2024);
    okHttpClient.setResponseCache(cache);
    OkClient cl=new OkClient(okHttpClient);
    restAdapter = new RestAdapter.Builder().setEndpoint(API_URL)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setClient(cl).build();
日志显示此标题:

HTTP/1.1 200 OK
Cache-Control: max-age=7200
Connection: Keep-Alive
Content-Type: text/html
Date: Tue, 18 Mar 2014 18:38:16 GMT
Keep-Alive: timeout=3, max=100
OkHttp-Received-Millis: 1395167895452
OkHttp-Response-Source: NETWORK 200
OkHttp-Sent-Millis: 1395167895378
Server: Apache/2.2.26 (Unix)
Transfer-Encoding: chunked
X-Powered-By: PHP/5.3.28
我通过在每次调用时返回服务器Unix时间来检查响应,它总是返回一个新的响应,这意味着

缓存控制:最大年龄=7200

完全被忽略 缓存中的日志文件也会更新为“干净”和“脏”注释,但不会缓存任何内容。
有什么明显的问题我看不到吗?

我想我也有类似的问题。缓存的大小以KB为单位设置,您将其设置为仅2024 KB。那几乎没有足够的空间放任何东西。尝试将其设置为“10L*1024*1024”(10Mb),看看是否有帮助。

您的请求是什么样子的?我无法在测试中再现这个问题。好的,我试过你的例子,它在给定的文件夹中缓存了一些东西。可能是因为服务器时间或其他原因。如果我查看日志文件,它会被写入,但会立即被删除。啊,我猜您没有读取完整的HTTP响应正文,这会导致缓存响应中止。您正在使用OkHttp 1.5.2吗?可能会好的。我正在使用OkHttp 1.5.2和最新的改进版。所以我想我读了完整的请求。正如我建议的那样,我确实在请求中添加了max-stale头,但是请求仍然不会被缓存。你说得对。稍后将尝试并报告。目前使用一些自定义的黑客方法,我觉得不舒服。