Longobard
написал 13 апреля 2004 года в 20:54 (1227 просмотров)
Ведет себя
как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.
Пишу сейчас веб-сервер. Скурил всю RFC2068. Там есть такое поле как ETag. Насколько я понял в нем должен быть токен, уникальный для каждого ресурса, и чтобы он менялся при изменении ресурса. Для такого случая ИМХО больше всего подходят md5 . Какие есть функции для подсчета md5 файла на C/C++?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
функций в glibc нет. есть бмблиотеки для этого.
Почитай RFC 1321
http://www.faqs.org/rfcs/rfc1321.html
Good Luck,
UT
decvar а что за либа? Как называется?
libmd5
где-то даже я ее пользовал. Но это не правильно — реализуй сам, кто тебе гарантирует что эта либа стоит у потенциального пользователя?
Намек: в конце RFC 1321 есть код, который все это счастье реализует.
А вообще, ETag должен быть уникален только для твоей машины. Идея брать время модификации вместо того, чтобы долго и муторно вычислять md5, не так уж плоха. Добавь туда номер иноды до кучи — и будет дешево и сердито.
Good Luck,
UT
Позволю не согласится. entity-tag бывает двух типов — weak & strong. Суть такая что weak может совпадать для двух разных ресурсов. Дата модификации & инод — это и есть weak tag. А strong tag должен быть уникальным для каждого ресурса. То есть даже при изменении одного бита ресурса он должен меняться, и два ресурса одинкового размера/даты и пр. также должны иметь разлиыне strong-etag-и. А либу (libmd5) можно включать в дистр сервера и предлагать пользователю поставить ее если отсутствует.
Ну ты, конечно, не согласись, но инода и время изменения однозначно определяют файл на одной данной машине, причем, с изменением файла это комбинированное число меняется.
С другой стороны, в принципе не может существовать метода, который бы сопоставлял любому файлу, на разных машинах, независимо друг от друга, уникальный идентификатор длиной в одну строку. Таким абсолютно уникальным идентификатором может быть только сам файл. Так что такая задача и не ставится. Strong etag определяет файл однозначно _для данного сервера_ а weak etag совпадает для эквивалентных с точки зрения вебмастера файлов _в пределах данного сервера_.
Более того, хотя и маловероятно, но md5 суммы могут совпадать для различных файлов, а иноды не могут.
Good Luck,
UT
Дык. Я не говорю что strong-etag должен быть одинаков для одинаковых файлов на разных машинах. Короче я разобрался, всем спасибо, топик закрыт (спасибо decvar & UT, с помощью RFC1321 я разобрался с libmd5 :) )