Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Android HttpResponseCache不工作_Android_Http Caching - Fatal编程技术网

Android HttpResponseCache不工作

Android HttpResponseCache不工作,android,http-caching,Android,Http Caching,我正试图利用HttpResponseCache,但没能让它正常工作 我是这样安装的: SdCardManager manager = SdCardManager.getSdCardManager(context); File dir = new File(manager.getAbsolutePathForSdCardFile(""), "http"); Log.e("Test", "Installing cache to " + dir.getA

我正试图利用HttpResponseCache,但没能让它正常工作

我是这样安装的:

        SdCardManager manager = SdCardManager.getSdCardManager(context);
        File dir = new File(manager.getAbsolutePathForSdCardFile(""), "http");
        Log.e("Test", "Installing cache to " + dir.getAbsolutePath());
        HttpResponseCache.install(dir, 10 * 1024 * 1024);
我的连接代码是:

    try{
        URL url = new URL(mUrl);

        HttpURLConnection connection = (HttpURLConnection) ((mProxy == null) ? url
                .openConnection() : url.openConnection(mProxy.getProxy()));

        HttpResponseCache cache = HttpResponseCache.getInstalled();
        Log.e("Test", "Req count: " + cache.getRequestCount() + " hit count " + cache.getHitCount() + "   size = " + cache.size());

        connection.setUseCaches(true);
        connection.setDefaultUseCaches(true);
        connection.addRequestProperty("Cache-Control", "max-stale=" + (60 * 60 * 24 * 28));

        applyHeaders(connection);
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(mTimeout);
        connection.setReadTimeout(mTimeout);

        connection.connect();

        mStatusCode = connection.getResponseCode();
        mStatusMessage = connection.getResponseMessage();

        connection.disconnect();
    }
    catch (IOException ex) {
        ex.printStackTrace();
        return false;
    }
在adb shell中,我看到正在创建缓存目录,它有一个日志文件。但是,不再向目录发送更多数据:

shell@maguro:/storage/emulated/legacy/Android/data/com.snip.pre/files/http $ ls
journal
我在每次请求后刷新缓存:

HttpResponseCache cache = HttpResponseCache.getInstalled();
cache.flush();
你知道我做错了什么吗?服务器响应标题如下所示:

GET /imgv.oms/0.0.1fd02.a7003c2a HTTP/1.1
Cache-Control: max-stale=2419200
Authorization: Basic bWFydGlubDppc2lz
X-Loginpageredirect: none
Accept: image/*
Accept-Encoding: gzip,deflate
Accept-Language: en-GB
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.3; Galaxy Nexus Build/JWR66Y)
Host: appsdev2.server.com:81
Connection: Keep-Alive
Cookie: POSESSIONID=F8654323-f7frSyNmAGKsvE4nFXZJQIIy3Io

是否有任何东西阻止它被缓存?

问题在于我发送的是授权标头,而标准对此类请求是否可缓存有特定规则。看

第14.8节


服务器不允许我缓存结果,njzk2也提到了这一点。

你确定你的资源是可缓存的吗?什么确切地定义了可缓存?标题中有返回的内容吗?我用一些Json和一个pint图像尝试了一下,得到了相同的结果。此外,相同的内容在同等的iOS客户端上缓存时不会出现问题。是的。服务器头定义了对象是否可以缓存以及缓存多长时间。我只在登录时发送授权头,然后使用cookies。这意味着我的请求中是否存在无法缓存的身份验证头