Каков наилучший способ создать etag?[закрыто]

StackOverflow https://stackoverflow.com/questions/162105

  •  03-07-2019
  •  | 
  •  

Вопрос

Какой хороший метод программной генерации etag для веб-страниц и рекомендуется ли эта практика?Некоторые сайты рекомендуют отключить etags, другие рекомендуют создавать их вручную, а некоторые рекомендуют оставить настройки по умолчанию активными - какой здесь лучший способ?

Это было полезно?

Решение

ETag действительно помогают, когда вы используете какой-то механизм кэширования перед вашим сайтом-генератором. Сами браузеры их не используют, они слушают " (если) измененные, так как " или "возраст" структура заголовка, афаик.

В любом случае, благодаря своей простой природе, нет проблем с предоставлением http-заголовка с ETag. Я слышал, что многие веб-серверы просто берут местоположение файла и временную метку файла и делают md5-хеш над этими данными.

В качестве примера мы создали простой, но эффективный etag с нашим программным обеспечением. Каждая «единица содержания» (то есть html, jpegs, gifs ...) в нашем программном обеспечении имеет уникальный идентификатор и номер версии (т.е. jpeg имеет идентификатор "17" и версию "2", это означает, что он был изменен один раз). Таким образом, ETag просто является строкой «id-version», здесь: «17-2». При следующем изменении это будет «17-3»; так что кэширующий распознает изменение, полностью загружает новую часть контента (один раз) и сохраняет ее в своем собственном кэше.

Но вы также можете использовать URL-адрес и временную метку (т.е. временную метку файла).

Другие советы

Я рекомендую создать хэш содержимого, например, <Код> md5 ($ содержание) .
Кроме того, чтобы предотвратить коллизию хешей, вы можете добавить, например, идентификатор элемента содержимого для него (если это уместно).

Хорошо, ETag имеет смысл, когда вы сильно полагаетесь на кеширование. Они являются отличным индикатором состояния ресурса (например, URL).

Например, допустим, вы используете запрос ajax , чтобы получить последние комментарии пользователя, и вы хотите знать, есть ли какие-либо новые комментарии. Изменение ETag на alert для вашего приложения с новым контентом - менее дорогой способ проверить это.

Потому что, если ETag одинаков, вы можете сохранить кеш, но в противном случае перестроить его.

ETags также имеют большой смысл с RESTful API.

Что касается его генерации, обратитесь к spec Я думаю, что вы можете делать практически все, что захотите. Временная метка, хэш, все, что имеет смысл для вас / вашего приложения.

Я только что запустил YSlow, и он пожаловался на Etags, поэтому я провел небольшое исследование. Проблема в блоге Yahoo (см. Комментарии также) в том, что реализации ETag по умолчанию используют номер инода файла или номер ревизии ntfs или что-то еще, в равной степени зависящее от сервера, как часть хэша. Это, хотя и является быстрым, в основном предотвращает одинаковый etag для одного и того же файла, обслуживаемого двумя разными серверами, и приводит к повреждению как браузеров, так и последующих кэшей или балансировок нагрузки.

Предыдущее предложение использовать MD5 Hash является хорошим, хотя вы должны предотвратить, чтобы это само по себе стало проблемой производительности. Реализация этих предложений остается за читателем, хотя мне кажется, что это та штука, с которой ваша инфраструктура может справиться за вас.

Что касается меня, так как я нахожусь в простой среде, где временная метка файла будет более чем достаточной, я просто отключил их в Apache, используя FileETag none в моем файле .htaccess. Это закрывает YSlow и должно заставить вещи вернуться к дате последнего изменения в файле.

Как правило, "сайты" это препятствует их использованию - Yahoo, и это потому, что некоторые веб-серверы по умолчанию не создают автоматически ETAG, которые работают в фермах серверов. (Что является правильным и точным утверждением Yahoo.)

Но если у вас есть один веб-сервер, то все в порядке. Если нет, вам нужно проверить, как ваш веб-сервер справляется с этим, и действовать соответствующим образом.

Муфаса,

Yahoo (и YSlow) на самом деле поощряют их использование, но с оговоркой, что автоматически сгенерированные ETags будут отличаться от сервера к серверу.

Я пока не могу голосовать, поэтому я просто скажу, что согласен с предложением ввести хэш пути к файлу и временной метки (или имя таблицы + значение основного поля + временная метка, если они представлены содержимым базы данных).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top