0

我正在尝试检查文件是否在给定日期之后被修改。我发现我正在尝试使用 Java 的 HttpURLConnection 进行“条件获取”,但我从未得到 304 状态代码。这似乎是我需要的。但如果我尝试:

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

它应该返回 304 但你可以看到它没有,任何帮助都被占用了。

4

2 回答 2

3

该文件被修改。在结果之后将您的If-Modified-Since标题更改为某些内容。Last-Modified

我尝试过(使用 curl),这个 CDN 似乎在日期方面有问题。要获得对请求的304响应If-Modified-Since,您需要提供确切的Last-Modified日期(此处为 2012 年 10 月 28 日星期日 16:44:54 GMT)。不用说,这是来自这个 CDN 的邪恶行为。

于 2012-11-28T12:52:47.650 回答
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);
                }
于 2017-01-23T16:00:04.793 回答