>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Работа с серверными HTTP-заголовками, что я делаю не так? http://forum.mozilla-russia.org/viewtopic.php?id=55581 |
Sid > 09-07-2012 21:47:49 |
В Firefox 14 и выше пофиксили баг 754608. Хотя в программировании я полный ноль, я попытался исправить это для себя, взяв за основу известное расширение 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 начали сохранять эскизы, но вот, к примеру, те четыре, ссылки на которые я привёл выше, не хотят. ЧЯДНТ? |
Пандёнок > 10-07-2012 00:18:40 |
Sid |
Sid > 10-07-2012 00:31:05 |
Пандёнок |
Infocatcher > 10-07-2012 01:02:52 |
В патче делается проверка на httpChannel.isNoStoreResponse(), а после удаления no-store isNoStoreResponse() по-прежнему true, так что, видимо, надо еще что-то удалить/изменить. 10-07-2012 01:22:17 10-07-2012 01:24:50 |
hydrolizer > 10-07-2012 06:41:01 |
Infocatcher пишет
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 устанавливается, в частности, вот здесь: Выделить код Код: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; } вызовом вот отсюда: Выделить код Код: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? |
Пандёнок > 10-07-2012 11:00:02 |
okkamas_knife |
Пандёнок > 10-07-2012 11:06:51 |
okkamas_knife 10-07-2012 11:13:22 okkamas_knife пишет
А вот это вредный совет. Как раз в классическом SpeedDial размер эскизов в кеше - 800х800! |
Пандёнок > 10-07-2012 11:46:35 |
okkamas_knife пишет
Да, как раз спиддиал самый тормозящий. Я на почти новом профиле не дождался, когда же он загрузит эскизы. 8-( |
Infocatcher > 10-07-2012 14:21:15 |
hydrolizer пишет
Возможно... Как-то так, но это весьма корявое решение. |
Пандёнок > 10-07-2012 14:38:57 |
okkamas_knife |
Sid > 15-07-2012 14:39:17 |
Эх, всё оказалось совсем запущено. Будем писать в мозиллу. Infocatcher пишет
Вот-вот. Определённая логика в этом патче есть, но когда половина сайтов использует Cache-Control от фонаря, то получается маразм: скриншот аккаунта PayPal (на котором можно прочитать имя, баланс и список последних платежей) сохраняется, а невинная страничка ya.ru — нет. |
TLemur > 17-07-2012 07:34:00 |
https://bugzilla.mozilla.org/show_bug.cgi?id=756881 |