Мой класс обслуживания REST возвращается весной. Я аннотировал объект запроса аннотацией контекста, которая объявлена на уровне класса. Я написал 1 метод GET и другой метод PUT. В обоих этих методах я создал объект CacheControl и установил для no-cache значение true, а maxAge равно 0. Далее я использую объект запроса, созданный выше, и метод Request#evaluatePrecondition(<code><lastModified>
, <etag>
); чтобы проверить, должен ли файл быть извлечен заново (во время GET) и был ли он изменен кем-то другим (во время PUT).
Теперь проблема заключается в том, когда я отправляю запрос PUT, а затем после чего отправляю GET, Firefox, не отправлять, заголовок If-Modified-Since и ETag, но Chrome отправляет его. Firefox не отправка заголовка решает мою проблему, потому что тогда я получу бесплатные данные sh с сервера, когда сделаю следующий запрос на этот файл. Хотя chrome отправляет заголовок, последний измененный, ответ вышеупомянутого метода для GET должен быть нулевым, потому что то, что отправляет chrome, является старым последним измененным, и последнее изменение файла является более новым, но оно не является нулевым, следовательно, получая старые данные каждый раз.
Любое руководство будет полезно. </p>
<pre>class ServiceClass {
...
@Context
Request req;
....
@GET or @PUT (// annotating here in single method just to save space)
public Response getOrPutFileContent(HttpRequest request) {
...
CacheControl cc ....;
cc.setNoCache(true);
cc.setMaxAge(0);
Date lastMod = file.lastModified();
String eTag = getETagOfFile();
builder = req.evaluatePrecondition(lastMod, eTag);
if(builder != null) {
return builder.build(); //304 in case of GET and 412 in case of PUT
}
// IF NOT NULL THEN:
//FOR GET request: fetch Data from file, append cc, last modified and etag and send it
//FOR PUT request: save Data to file.
}
}