Подтвердить что ты не робот

Как работает этаг в выражениях

Expressjs автоматически отправляет etags. Я хотел бы знать, как генерируется etag.. он основан на содержимом, которое генерируется динамически с помощью процедуры get. или есть способ, которым я могу это сделать, даже не пройдя процесс генерации контента (динамический контент - из БД) и перейдя к нему так же.

может быть промежуточным программным обеспечением, которое начинается с проверки только того, является ли он действительным идентификатором сеанса и передает тот же самый тег, который клиент дает или может быть основан на идентификаторе url + session. Таким образом, он будет уникальным. и заканчивать запрос там, а через весь вызов db и все эти вещи. в этом случае мне нужно будет знать, что клиент делает вызов 304.

Я мог бы пойти с тегом expires. Но когда сессия закончилась. если кто-то открывает URL-адрес, он не должен позволять. поэтому я думаю, что etag должен основываться на идентификаторе сеанса. как это сделать, если изменение может работать в этом сценарии динамического контента. его можно использовать.

4b9b3361

Ответ 1

На момент написания статьи (8 июля 2014 года) слабые ETags генерируются с использованием CRC32 (источника) и сильные ETags генерируются с использованием MD5 (источник).

Основываясь на том, что говорит один из авторов Express,, вы можете указать, использовать ли сильные или слабые ETags:

app.enable('etag') // use strong etags
app.set('etag', 'strong') // same
app.set('etag', 'weak') // weak etags

Похоже, вы также можете указать свою собственную пользовательскую функцию, чтобы сделать ETags следующим образом:

app.set('etag', function(body, encoding){ /* return valid etag */ });

Пакет NPM fresh также стоит посмотреть, поскольку он используется в Express для проверки свежести (source1, source2).

Что касается вашего приложения, помните, что вы можете переопределить любые заголовки ответов, например. res.set('etag', 'my-awesome-etag-value') перед вызовом res.send() (или аналогичной функции). Дальнейшее обсуждение (включая преимущества и недостатки) можно найти здесь: https://github.com/visionmedia/express/issues/2129#issue-34053148

Ответ 2

Так как express 4.x, тип etag по умолчанию слабый

https://expressjs.com/en/api.html#etag.options.table

app.enable('etag') // use weak etags
app.set('etag', 'weak') // use weak etags also
app.set('etag', 'strong') // use strong etags

// custom etag generation
app.set('etag', function (body, encoding) {
  return generateHash(body, encoding); // consider the function is defined
});