Страницы: 1
В Firefox 14 и выше пофиксили баг 754608.
Bug 754608 - [New Tab Page] shows thumbnails from pages with "Cache-Control: no-store", and HTTPS pages when HTTPS disk caching is disabled
Страницы с no-store в Cache-Control не будут сохранять свои эскизы для новой вкладки. Сделано это для безопасности, но оказалось, что сотни самых обычных страниц почему-то прописывают себе no-store (например, thepiratebay.se, kinopoisk.ru, ubuntu.ru, thevista.ru). Зачем они это делают, не знаю, но это реальность. Получается, что половина моих превьюшек совершенно пустая, хотя никакой секретной информации на сайте про Убунту, разумеется, нет.
Хотя в программировании я полный ноль, я попытался исправить это для себя, взяв за основу известное расширение InlineDisposition (оно меняет значение заголовка Content-Disposition). Я хотел переделать его, чтобы выреза́ть no-store из Cache-Control, для этого в файле inlinedisposition.js я заменил:
_re: /^\s*attachment/i, _httpResponse: function( chan ) { var disp = ""; try { chan = chan.QueryInterface(Components.interfaces.nsIHttpChannel); disp = chan.getResponseHeader("Content-Disposition"); } catch (e) { } if (chan.loadFlags & Components.interfaces.nsIChannel.LOAD_DOCUMENT_URI && this._re.test(disp)) chan.setResponseHeader("Content-Disposition", disp.replace(this._re, "inline"), false); }
на
_re: /[\s]*no-store[\s]*[,]?/i, _httpResponse: function( chan ) { var disp = ""; try { chan = chan.QueryInterface(Components.interfaces.nsIHttpChannel); disp = chan.getResponseHeader("Cache-Control"); } catch (e) { } if (chan.loadFlags & Components.interfaces.nsIChannel.LOAD_DOCUMENT_URI && this._re.test(disp)) chan.setResponseHeader("Cache-Control", disp.replace(this._re, ""), false); }
Некоторые странички с no-store начали сохранять эскизы, но вот, к примеру, те четыре, ссылки на которые я привёл выше, не хотят. ЧЯДНТ?
Отредактировано Sid (15-07-2012 18:16:14)
Отсутствует
В патче делается проверка на httpChannel.isNoStoreResponse(), а после удаления no-store isNoStoreResponse() по-прежнему true, так что, видимо, надо еще что-то удалить/изменить.
Добавлено 10-07-2012 01:22:17
Наверное, надо поизучать спецификации, а то какой-то второй BetterCache выходит.
Оно работает, но это слишком сурово, надо понять, что реально надо удалять.
Можно попробовать найти исходник nsIHttpChannel.isNoStoreResponse().
Добавлено 10-07-2012 01:24:50
А вообще, пусть переделывают патч, чтобы хотя бы закрепленные сайты были с превьюшками.
Отредактировано Infocatcher (10-07-2012 01:24:50)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Можно попробовать найти исходник nsIHttpChannel.isNoStoreResponse().
http://mxr.mozilla.org/mozilla-central/ … l.cpp#1085
HttpBaseChannel::IsNoStoreResponse(bool *value) { if (!mResponseHead) return NS_ERROR_NOT_AVAILABLE; *value = mResponseHead->NoStore(); return NS_OK; }
http://mxr.mozilla.org/mozilla-central/ … eHead.h#36
а поле mCacheControlNoStore устанавливается, в частности, вот здесь:
http://mxr.mozilla.org/mozilla-central/ … ad.cpp#615
void nsHttpResponseHead::ParseCacheControl(const char *val) { if (!(val && *val)) { // clear flags mCacheControlNoCache = false; mCacheControlNoStore = false; return; } // search header value for occurrence(s) of "no-cache" but ignore // occurrence(s) of "no-cache=blah" if (nsHttp::FindToken(val, "no-cache", HTTP_HEADER_VALUE_SEPS)) mCacheControlNoCache = true; // search header value for occurrence of "no-store" if (nsHttp::FindToken(val, "no-store", HTTP_HEADER_VALUE_SEPS)) mCacheControlNoStore = true; }
вызовом вот отсюда:
http://mxr.mozilla.org/mozilla-central/ … ead.cpp#19
nsHttpResponseHead::SetHeader(nsHttpAtom hdr, const nsACString &val, bool merge) { nsresult rv = mHeaders.SetHeader(hdr, val, merge); if (NS_FAILED(rv)) return rv; // respond to changes in these headers. we need to reparse the entire // header since the change may have merged in additional values. if (hdr == nsHttp::Cache_Control) ParseCacheControl(mHeaders.PeekHeader(hdr)); else if (hdr == nsHttp::Pragma) ParsePragma(mHeaders.PeekHeader(hdr)); return NS_OK; }
Во всём этом хозяйстве заставляет задуматься вот этот кусочек:
if (!(val && *val)) { // clear flags mCacheControlNoCache = false; mCacheControlNoStore = false; return; }
Уж не к тому ли это, что, что поля mCacheControlNoCache/mCacheControlNoStore устанавливаются в false только при совсем пустом хидере Cache-Control?
Отсутствует
okkamas_knife
Вот именно. Размер эскизов во встроенном решении (точнее, во встроенной проблеме) - 800х600. ошибся - 640х360.
Для сравнения: Fast Dial сохраняет эскизы размером 300х225, SuperStart - 212х132, FVD SpeedDial - 400х480, Рабочий стол - 286х202.
Отредактировано Пандёнок (10-07-2012 14:39:23)
Отсутствует
okkamas_knife
Да, реально. Причем они в папке thumbnails с расширением .png, никак не спрятаны. И их не девять штук, а много. В общем, кеш всех недавно посещённых страниц в картинках.
Добавлено 10-07-2012 11:13:22
взять и поставить спиддиал
А вот это вредный совет. Как раз в классическом SpeedDial размер эскизов в кеше - 800х800!
Отредактировано Пандёнок (10-07-2012 11:16:57)
Отсутствует
спиддиал назвал только потому что помню название ибо подобными расширениеями не пользуюсь и считаю их бесполезными т тормозящими.
Да, как раз спиддиал самый тормозящий. Я на почти новом профиле не дождался, когда же он загрузит эскизы. 8-(
Отредактировано Пандёнок (10-07-2012 11:47:04)
Отсутствует
Уж не к тому ли это, что, что поля mCacheControlNoCache/mCacheControlNoStore устанавливаются в false только при совсем пустом хидере Cache-Control?
Возможно...
У меня выходит, что надо удалить Cache-Control, а вот Pragma почему-то не мешает.
Как-то так, но это весьма корявое решение.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Эх, всё оказалось совсем запущено. Будем писать в мозиллу.
Но спасибо за помощь!
А вообще, пусть переделывают патч, чтобы хотя бы закрепленные сайты были с превьюшками.
Вот-вот. Определённая логика в этом патче есть, но когда половина сайтов использует Cache-Control от фонаря, то получается маразм: скриншот аккаунта PayPal (на котором можно прочитать имя, баланс и список последних платежей) сохраняется, а невинная страничка ya.ru — нет.
Отсутствует
Страницы: 1