nixp.ru v3.0

20 октября 2017,
пятница,
10:02:50 MSK

DevOps с компанией «Флант»
Longobard написал 13 апреля 2004 года в 20:54 (595 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Пишу сейчас веб-сервер. Скурил всю RFC2068. Там есть такое поле как ETag. Насколько я понял в нем должен быть токен, уникальный для каждого ресурса, и чтобы он менялся при изменении ресурса. Для такого случая ИМХО больше всего подходят md5 . Какие есть функции для подсчета md5 файла на C/C++?

decvar

функций в glibc нет. есть бмблиотеки для этого.

Uncle Theodore

Почитай RFC 1321

http://www.faqs.org/rfcs/rfc1321.html

Good Luck,

UT

Longobard

decvar а что за либа? Как называется?

decvar

libmd5

где-то даже я ее пользовал. Но это не правильно — реализуй сам, кто тебе гарантирует что эта либа стоит у потенциального пользователя?

Uncle Theodore

Намек: в конце RFC 1321 есть код, который все это счастье реализует.

А вообще, ETag должен быть уникален только для твоей машины. Идея брать время модификации вместо того, чтобы долго и муторно вычислять md5, не так уж плоха. Добавь туда номер иноды до кучи — и будет дешево и сердито.

Good Luck,

UT

Longobard
Uncle Theodore
ETag должен быть уникален только для твоей машины. Добавь туда номер иноды до кучи —  и будет дешево и сердито.

Позволю не согласится. entity-tag бывает двух типов — weak & strong. Суть такая что weak может совпадать для двух разных ресурсов. Дата модификации & инод — это и есть weak tag. А strong tag должен быть уникальным для каждого ресурса. То есть даже при изменении одного бита ресурса он должен меняться, и два ресурса одинкового размера/даты и пр. также должны иметь разлиыне strong-etag-и. А либу (libmd5) можно включать в дистр сервера и предлагать пользователю поставить ее если отсутствует.

Uncle Theodore
LONGOBARD
Позволю не согласится. entity-tag бывает двух типов — weak & strong. Суть такая что weak может совпадать для двух разных ресурсов. Дата модификации & инод — это и есть weak tag. А strong tag должен быть уникальным для каждого ресурса. То есть даже при изменении одного бита ресурса он должен меняться, и два ресурса одинкового размера/даты и пр. также должны иметь разлиыне strong-etag-и. А либу (libmd5) можно включать в дистр сервера и предлагать пользователю поставить ее если отсутствует.

Ну ты, конечно, не согласись, но инода и время изменения однозначно определяют файл на одной данной машине, причем, с изменением файла это комбинированное число меняется.

С другой стороны, в принципе не может существовать метода, который бы сопоставлял любому файлу, на разных машинах, независимо друг от друга, уникальный идентификатор длиной в одну строку. Таким абсолютно уникальным идентификатором может быть только сам файл. Так что такая задача и не ставится. Strong etag определяет файл однозначно _для данного сервера_ а weak etag совпадает для эквивалентных с точки зрения вебмастера файлов _в пределах данного сервера_.

Более того, хотя и маловероятно, но md5 суммы могут совпадать для различных файлов, а иноды не могут.

Good Luck,

UT

Longobard

Дык. Я не говорю что strong-etag должен быть одинаков для одинаковых файлов на разных машинах. Короче я разобрался, всем спасибо, топик закрыт (спасибо decvar & UT, с помощью RFC1321 я разобрался с libmd5 :) )