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

Отключить заголовок etag в Express Node.js

Нам нужно удалить заголовок etag из всех ответов HTTP в нашем приложении Node.js Express. У нас есть API веб-сервисов, написанный в Express, где неожиданные результаты видны у клиента при отправке etags, и клиент отправляет обратно заголовок if-none-match.

Мы пробовали app.disable('etag') и res.removeHeader('etag'), но не работаем; приложение отправляет заголовок независимо.

Есть ли другие способы отключения этого заголовка во всех ответах?

4b9b3361

Ответ 1

app.disable('etag') теперь должен работать, запрос на растяжение был объединен, чтобы справиться с этим:

https://github.com/visionmedia/express/commit/610e172fcf9306bd5812bb2bae8904c23e0e8043

ОБНОВЛЕНИЕ: как отметил Бидуд в комментариях, новый способ делать вещи следующий

app.set('etag', false); // turn off

Изменения произошли с версией 3.9.0: https://github.com/strongloop/express/releases/tag/3.9.0

Подробнее о настройке etag проверьте документы 4.x здесь: http://expressjs.com/4x/api.html#app.set

Ответ 2

app.disable('etag')

Это отключит заголовок etag для всех запросов, но не для статического содержимого. Ниже приведено статическое содержимое:

app.use(express.static(path.join(__dirname, 'public'), {
        etag: false
}));

Ответ 3

Мне кажется, что реальное решение вашей проблемы будет заключаться в том, чтобы выяснить, почему она ведет себя странно из-за etags.

Чтобы ответить на ваш вопрос, в настоящее время Express не поддерживает отмену заголовков etags. Он был фактически обсужден и объединен в этом запросе на растяжение, но позже был отменен. Если вам это действительно нужно и вы не хотите исправлять проблему с корнем, вы всегда можете применить этот патч и перейти оттуда.

Ответ 4

Глядя на экспресс response.js, Etags отправляются только тогда, когда метод запроса GET. Вы можете запретить экспресс отсылать etags в ответ, установив request.method на что-то еще до вызова response.send().

например:

app.get('/path/returnsJSON', function(req, res){
/* HACK to workaround the framework sending e-tags and "304 NOT MODIFIED" responses */
req.method="NONE"; // was "GET"
res.status(200).send({data:1}); 
});

Это работало нормально для меня.