Хеши вложения Couchdb не соответствуют содержанию вложения

Единственный надлежащий способ отключить кэширование браузера HTTP-заголовками от самого веб-приложения. Один только заголовок HTTP 1.1 "Управления Кэша" должен быть достаточным для любого post-year-2000 браузера. Но для дополнительной защиты сервер может испустить и "управление кэша" HTTP 1.1 и HTTP 1.0, "Истекает" заголовки вместе.

hack'ish, но иногда замечаемый способ обработать аннулирование кэша является строкой "cachebuster" в URL с сервера. cachebuster часто является меткой времени, базирующейся, и добавляется, поскольку querystring к каждому HTML СВЯЗЫВАЕТСЯ для создания URL уникальным и только используемым однажды. Что-то как http://example.org/filename.html?cb=. Это ужасно, и не делает ничего, что HTTP-заголовки не делают намного лучше. Но это могло использоваться в качестве взлома для ограниченной аудитории (fx на Интранет), или как дополнительный слой защиты вместе с надлежащими HTTP-заголовками.

AFAIK там не является никаким способом выборочно отключить кэширование для единственного сайта только из Internet Explorer. Один (чертовски сложный) решение могло состоять в том, чтобы установить кэш Лака как посреднический кэш на Вашей LAN, установить Internet Explorer, чтобы использовать Лак в качестве Прокси HTTP и использовать язык VCL на Лаке для переписывания HTTP-заголовков для этого определенного сайта только.

Честно, я думаю, что Ваш поставщик делает ошибку здесь. Я предложил бы установить Fiddler2 для IE или Firebug для Firefox, и посмотреть на фактические HTTP-заголовки, которые отправляет веб-приложение. Коррелят, что с учебным руководством по кэшированию Mark Nottingham, которое я уже связал с вышеупомянутым - я предполагаю заголовки, разрешает кэшироваться или по крайней мере выразительно не запрещает кэширование.

2
задан 7 November 2013 в 21:43
2 ответа

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

Мне удалось воспроизвести дайджест md5, созданный CouchDB для вложений, используя следующее в узле:

var crypto = require('crypto');

var attachmentData = "base64-encoded-data"

var buf = new Buffer(attachmentData, 'base64')
  , md5 = crypto.createHash('md5').update(buf).digest('base64');

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

1
ответ дан 3 December 2019 в 12:57

CouchDB действительно вычисляет хэш после сжатия для сжимаемых файлов.

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

0
ответ дан 3 December 2019 в 12:57

Теги

Похожие вопросы