Сведения о вопросе

MAT

16:03, 1st July, 2020

Теги

HTTP: Создание Заголовка ETag

Просмотров: 603   Ответов: 6

Как создать заголовок ETag HTTP для файла ресурсов?



  Сведения об ответе

#hash

18:03, 1st July, 2020

До тех пор, пока он меняется всякий раз, когда меняется представление ресурса, то, как вы его производите, полностью зависит от вас.

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

  1. не требует повторного вычисления его для каждого условного GET, и
  2. не изменяется, если содержимое ресурса не изменилось

Использование хэшей содержимого может привести к сбою в #1, если вы не сохраните вычисленные хэши вместе с файлами.

Использование номеров индексов может привести к сбою в #2, если вы перестроите свою файловую систему или будете обслуживать контент с нескольких серверов.

Один из механизмов, который может работать, - это использование чего-то полностью зависимого от контента, такого как SHA-1 hash или строка версии, вычисляемая и сохраняемая один раз при изменении содержимого ресурса.


  Сведения об ответе

9090

18:03, 1st July, 2020

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

etag должен быть вычисляемым на сервере на основе файла. Что-то вроде контрольной суммы, но вы, возможно, не захотите проверять каждый файл, отправляющий ее.

 server                client

        <------------- request file foo

 file foo etag: "xyz"  -------->

        <------------- request file foo
                       etag: "xyz" (what the server just sent)

 (the etag is the same, so the server can send a 304)

Я построил строку в формате "file inode number/datestamp/file size". Таким образом, если файл был изменен на сервере после того, как он был передан клиенту, то вновь созданный etag не будет соответствовать, если клиент повторно запросит его.

char *mketag(char *s, struct stat *sb)
{
    sprintf(s, "%d/%d/%d", sb->st_ino, sb->st_mtime, sb->st_size);
    return s;
}


  Сведения об ответе

LAST

18:03, 1st July, 2020

От http://developer.yahoo.com/performance/rules.html#etags :

По умолчанию и Apache, и IIS встраивают данные в ETag, что значительно снижает вероятность успешного выполнения теста валидности на веб-сайтах с несколькими серверами. ...

Если вы не пользуетесь преимуществами гибкой модели проверки, которую предоставляет ETags, лучше просто удалить ETag полностью.


  Сведения об ответе

piter

18:03, 1st July, 2020

Как создать значение по умолчанию apache etag в bash

for file in *; do printf "%x-%x-%x\t$file\n" `stat -c%i $file` `stat -c%s $file` $((`stat -c%Y $file`*1000000)) ; done

Даже когда я искал что-то точно такое же, как etag (браузер запрашивает файл только в том случае, если он изменился на сервере), это никогда не работало, и я закончил использовать трюк GET (добавив timestamp в качестве аргумента get к файлам js).


  Сведения об ответе

nYU

18:03, 1st July, 2020

Ive было через Адлер-32 в качестве html ссылку Shortener. Я не уверен, что это хорошая идея, но до сих пор я не заметил никаких дубликатов. Он может работать как генератор etag. И это должно быть быстрее, чем пытаться использовать схему шифрования hash, такую как sha,но я не проверил это. Код, который я использую, это:

 shortlink = str(hex(zlib.adler32(link)+(2**32-1)/2))[2:-1]


  Сведения об ответе

PAGE

18:03, 1st July, 2020

Я бы рекомендовал не использовать их и вместо этого перейти к последним измененным заголовкам.

У Askapache есть полезная статья об этом. (как они делают почти все, что кажется!)

http://www.askapache.com/htaccess/apache-speed-etags.html


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться