嗨我正在尝试使用Android 4中引入的HttpResponseCache.文档确实谈到了如何安装缓存,但我完全失去了如何缓存从网上下载的图像.早期我使用的是DiskLruCache来缓存它们.有人会指出我使用HttpResponseCache的工作代码的一些例子.
编辑: - 有人能告诉我这里做错了什么: -
MainActivity.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
final File httpCacheDir = new File(getCacheDir(), "http");
try {
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
Log.v(TAG,"cache set up");
} catch (Exception httpResponseCacheNotAvailable) {
Log.v(TAG, "android.net.http.HttpResponseCache not available, probably because we're running on a pre-ICS version of Android. Using com.integralblue.httpresponsecache.HttpHttpResponseCache.");
try{
com.integralblue.httpresponsecache.HttpResponseCache.install(httpCacheDir, httpCacheSize);
}catch(Exception e){
Log.v(TAG, "Failed to set up com.integralblue.httpresponsecache.HttpResponseCache");
}
}
TheMainListFrag …Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 5.1项目,使用大量的ajax调用返回html块.
为了优化网站的速度,我想实现私有和公共响应缓存.使用以下代码可以正常工作:
return response()
->json($result)
->header('Cache-Control', 'public, max-age=300');
Run Code Online (Sandbox Code Playgroud)
然而,以这种方式使用它不会占用在300秒内更新的帐户对象.
当且仅当返回的对象已更新时,是否有可能允许我清除请求的响应缓存?
我试图HTTPResponseCache在我的应用程序中使用内置(通过HTTPURLConnectionAPI 发出请求),但是在尝试使用包含Authorization标头来请求缓存任何响应时遇到问题.
我可以让它缓存在响应的唯一方法都是明确提出"公开"在Cache-Control服务器上的响应头(s-maxage可能工作太,没试过,但明确将private导致没有缓存); 但这意味着任何中间代理都会缓存响应以服务于其他客户端,这不是我想要的.
我的理解是,用户代理缓存会Authorization默认缓存标头请求的响应或private标头.看起来HTTPResponseCache它在解释标头而不是用户代理缓存方面就像共享缓存一样.或者我对缓存标准的理解不正确?
有什么办法可以让缓存像用户代理HTTP缓存一样工作吗?
这在我的安装代码中:
public static void setupCache(Context context, long httpCacheSize){
File httpCacheDir = new File(context.getCacheDir(),"http");
HttpResponseCache.install(httpCacheDir, httpCacheSize);
}
Run Code Online (Sandbox Code Playgroud)
我需要在这里做些不同的事吗?或许我需要在我的请求中包含一些用户代理信息?
我有一个api请求,它返回响应以及响应头Last-Modified和Date.我正在使用HttpUrlConnection来发出HTTP.GET请求.我也使用HttpResponseCache来缓存响应.
当服务器返回响应代码200时,响应被缓存.我现在面临两个问题.
第一:当第二次请求api时,HttpUrlConnection将'Date'标头的值设置为'If-Modified-Since'标头,而不是使用'Last-Modified'标头的值.
我通过从缓存的响应中手动设置If-Modified-Since标头来解决此问题.所以现在服务器在第二次请求api时返回304.
这是我的第二个问题.
第二:通常如果服务器返回304并且响应被缓存,则HttpUrlConnection返回缓存的响应,响应代码将为200.这在响应中具有ETag头的api响应的情况下根据需要起作用.但是对于仅具有Last-Modified标头的响应,HttpUrlConnection将响应代码返回为304本身,并且不返回缓存的响应.有没有人遇到过类似的问题?
请在下面找到api请求的java实现.
URL url = new URL(this.url);
HttpURLConnection conn = getProtocolType(url);
conn.setRequestMethod("GET");
conn.setReadTimeout(timeOut);
conn.setConnectTimeout(timeOut);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", this.userAgent);
conn.setRequestProperty("Cache-Control", "max-age=0");
conn.setUseCaches(true);
conn.setDefaultUseCaches(true);
conn.connect();
this.responseCode = conn.getResponseCode();
Run Code Online (Sandbox Code Playgroud)