В настоящее время я обращаюсь к веб-сайту oracle с просьбой загрузить java из моего приложения, и я проверяю, обновляется ли мой локальный файл с помощью тега If-None-Match, отправляющего ETag локального файла.Сервер возвращает мне ETag в этом формате: "acd45017cd055c797a331b2f0652d293: 1539062148.210488", который является etag: last-Modified.
В этом случае сервер должен вернуть 304, но он всегда возвращает 200, потому что мой локальный ETag "acd450173d0b2b2cне совпадает с сервером ETag "acd45017cd055c797a331b2f0652d293: 1539062148.210488"
protected HttpURLConnection makeConnection(URL url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setUseCaches(false);
connection.setDefaultUseCaches(false);
if (!shouldIgnoreLocal() && getTarget().isFile())
connection.setRequestProperty("If-None-Match", getDigest(getTarget(), "MD5", 32));
connection.setRequestProperty("Cookie", "oraclelicense=accept-securebackup-cookie");
connection.setRequestProperty("Cache-Control", "no-store,max-age=0,no-cache");
connection.setRequestProperty("Expires", "0");
connection.setRequestProperty("Pragma", "no-cache");
connection.setConnectTimeout(5000);
connection.setReadTimeout(30000);
int status = connection.getResponseCode();
while (status != HttpURLConnection.HTTP_OK && (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER)) {
String newUrl = connection.getHeaderField("Location");
connection = makeConnection(new URL(newUrl));
status = connection.getResponseCode();
}
System.out.println(connection.getHeaderField("Last-Modified"));
System.out.println(connection.getHeaderField("If-None-Match"));
System.out.println(connection.getHeaderField("ETag"));
System.out.println(connection.getResponseCode());
System.out.println(connection.getHeaderField("Last-Modified"));
System.out.println(connection.getHeaderField("If-None-Match"));
System.out.println(connection.getHeaderField("ETag"));
System.out.println(connection.getResponseCode());
return connection;
}