2014-12-15 7 views
1

У меня есть отдых, как API через узел Express. ETag по умолчанию не включен или выключен. Однако всякий раз, когда я тестирую удары по серверу, он всегда дает мне новый ETag, даже если возвращенный JSON/HTML точно такой же. Я также проверил возвращенный заголовок, и они выглядят одинаково. Я тестировал это с двумя типами контента, API и статическим содержимым HTML, как страница конфиденциальности.Экспресс eTag всегда меняется

Любая идея, как проверить, что делает его разным каждый раз?

ответ

3

Экспресс «Поведение по умолчанию - это обеспечить« сильный »проверенный etag, который будет только таким, как предыдущий, если текущий ответ точно тот же, байт для байт.

Вы можете попробовать установить экспресс 'etag, чтобы проверить достоверность ответа, что указывает браузеру, что текущий ответ семантически эквивалентен предыдущему с тем же значением, то есть, в то время как они могут быть не байт- байт то же самое, они инкапсулируют или представляют один и тот же смысл. Для этого используйте app.set('etag','weak')

Наконец, если это не сработает для вас, вы можете создать свою собственную функцию проверки этага с помощью app.get('etag',function(body,encoding){...}), где вы вернете хэш, сгенерированный из вашего контента; это позволяет вам контролировать, какой экспресс (и, следовательно, браузер) считает, что отличается от означает в контексте вашего ответа.

Больше, чем вы когда-либо хотели знать о ETags можно найти на Wikipedi:HTTP_ETag

+0

Спасибо. Что такое «точно» то же самое, если ответ json точно такой же, что еще он принимает во внимание? некоторые заголовки? – Yun

+0

ETags - это хеши тела ответа. Попробуйте вернуть статический файл, чтобы узнать, изменяется ли ETag. Если это произойдет, что-то сломается в вашей конфигурации. Если это не так, то ответы, которые вы получаете от вашего вызова API, не совпадают. Попробуйте сохранить два разных ответа на файлы и запустить 'diff' на них, чтобы определить, как они, er, отличаются. ;) –

+0

Также, под обложками, экспресс использует пакет «etag» от npm ([etag] (https://www.npmjs.com/package/etag)). Вы также можете найти свой ответ. –