我试图在给定日期之后检查文件是否已被修改。我找到了I'm trying to use Java's HttpURLConnection to do a "conditional get", but I never get a 304 status code。这看起来像我需要的。 但如果我尝试:
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
connection.setRequestProperty("If-Modified-Since", "Wed, 06 Oct 2010 02:53:46 GMT");
System.out.println(connection.getHeaderFields());
输出结果为:
{null=[HTTP/1.1 200 OK], ETag=["087588e2bb5cd1:0"],
Date=[Wed, 28 Nov 2012 12:39:31 GMT], Content-Length=[1150],
Last-Modified=[Sun, 28 Oct 2012 16:44:54 GMT], Accept-Ranges=[bytes],
Connection=[keep-alive], Content-Type=[image/x-icon], X-Cache=[HIT],
Server=[NetDNA-cache/2.2], Cache-Control=[max-age=604800]}
修改
我今天已经尝试了约会,但仍然没有回复304.
2012年11月28日星期三12:59:56 GMT
它应该返回304但是你可以看到它没有,任何帮助都是合适的。
答案 0 :(得分:3)
文件已已修改。 If-Modified-Since
结果后,将Last-Modified
标题更改为。
我尝试了(卷曲),这个CDN似乎有日期问题。要获得对304
请求的If-Modified-Since
响应,您需要才能提供确切的Last-Modified
日期(2012年10月28日星期日,格林威治标准时间16:44:54) )。毋庸置疑,这是CDN的邪恶行为。
答案 1 :(得分:0)
你应该使用这样的东西......
connection.addRequestProperty(“If-Modified-Since”,lastModified);
以下是代码:
try {
HttpResponseCache cache = responseCache.getInstalled();
cacheResponse = cache.get(uri, "GET",
new HashMap<String, List<String>>());
if (cacheResponse != null) {
Map<String, List<String>> headers = cacheResponse
.getHeaders();
List<String> eTagHeader = headers.get("ETag");
eTag = eTagHeader.get(0);
if (eTag != null) {
connection.addRequestProperty("If-None-Match", eTag);
}
if(headers.containsKey("Last-Modified")){
List<String> lastModifiedList = headers.get("Last-Modified");
if(null != lastModifiedList && !lastModifiedList.isEmpty()){
String lastModified = lastModifiedList.get(0);
if(null != lastModified){ connection.addRequestProperty("If-Modified-Since", lastModified);
}
}
}
}
} catch (IOException e1) {
Log.e(TAG, String.format("Cannot read from cache.", url),
e1);
}