Как установить Etag для URL в игровых рамках?
Я уже искал, чтобы установить Etag в playframework. Все, что я получил, это
1) https://www.playframework.com/documentation/2.0/Assets
2) https://www.playframework.com/documentation/2.0/JavaResponse
Первый вариант работает только для активов или файлов. Второй вариант не работает. Я просто добавил три, приведенные в примере.
1 ответ
На самом деле использование Etag описано в документации Play для ресурсов (которые вы указали в первую очередь), а также в разделе " Типичное использование" Википедии.
В начале действия вам нужно определить, был ли изменен запрошенный ресурс с предыдущего поколения Etag, и если да, то вам нужно сгенерировать новый контент с новым Etag, в противном случае вы возвращаете только 304 NotModified
ответ.
Конечно, все зависит от вида запрашиваемого ресурса, в любом случае достаточно чистым примером может быть объект базы данных, с некоторым идентификатором и полем с датой / временем последней модификации:
public static Result eTaggedFoo(Long id) {
Foo foo = Foo.find.byId(id);
if (foo == null) return notFound("Given Foo was not found");
String eTag = DigestUtils.md5Hex(foo.id + foo.lastModification.toString());
String ifNoneMatch = request().getHeader("If-None-Match");
if (ifNoneMatch != null && ifNoneMatch.equals(eTag)) return status(304);
response().setHeader(ETAG, eTag);
return ok("Here you can see the " + foo.name + ", last modified: " + foo.lastModification.toString());
}