Название: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 15, 2009, 13:03 Смысл в том, чтобы заставить NetworkAccessManager не кешировать конкретную картинку. Для этого перегружаю его метод createRequest(), который применяется ко всем незакешированным ресурсам страницы, ставлю в нём условие типа если myReq.url() (myReq наследует оригинальный request) равен url'у этой картинки, то сделать запрет на кеширование.
Собственно уже делал: 1) myReq.setRawHeader( new QByteArray("Cache-Control"), new QByteArray("no-cache") ); //другие заголовки переопределяются нормально, этот почему-то всё равно не влияет на отмену кеширования. 2) ставил также заголовок "If-Modified-Since" с датой раньше на пару дней (также даже раньше чем собственно 01.01.1970) - не помогло. 3) менял myReq.url() на myReq.url()+random(): Код в надежде, что урл каждый раз будет разный и прога не будет обращаться к кешу, не проканало. Хотя если после этого проверить (myReq.url()), то он действительно изменённый с рандомом. Также была куча других вариантов, не столь внушающих надежды как эти. Интересно то, что если к адресу картинки в самом скрипте сайта добавить какой-нибудь random(), то картинка действительно не кешируется! Почему этого же не делает программа, вот что странно. Также знаю что картинка отдаёт "Cache-Control:no-cache" и "Pragma:no-cache", так что с её стороны всё нормально. Не кешировать отдельно картинку надо для того, чтобы не отключать весь кеш, хотя в таком случае бы всё работало как надо, но сильно влияет на скорость работы, это и понятно. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 15, 2009, 17:59 Также не помогло закидываение реквеста с картинкой в NetworkAccessManager, который для QNetworkDiskCache выполняет setMaximumCacheSize(0).
QNetworkDiskCache наверно считается как "дополнительный" (если необоходимо) кэш? Т.к. указанный в setCacheDirectory() каталог он всё же создаёт. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 16, 2009, 13:35 Проблема, наверно, в том, что
Код надо делать раньше чем в методе createRequest(), но вот где... Кстати, если при new QUrl() будет какая-нибудь php-страница, то не кешируется даже без применения рандома. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 21, 2009, 20:33 Нахождение решения проблемы - $15. icq: 25-00-25-75пять
Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: ритт от Декабрь 23, 2009, 17:07 попробуй
req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false); req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); и в setUrl нужно не myReq.setUrl(new QUrl(..)) а myReq.setUrl(QUrl(..)) Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 23, 2009, 17:17 попробуй тоже пробовал, безрезультатно (забыл указать в первом посте, просто слишком много вариантов уже было)req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false); req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); и в setUrl нужно не Это в с++ наверное так, у меня jambi (java), там только через экземпляр объекта. Такое впечателине, что QNetworkAccessManager в первую очередь смотрит какой адрес нужен qwebview, а на программера внимания уже особо не обращает)). Меняй не меняй - как об стену. myReq.setUrl(new QUrl(..)) а myReq.setUrl(QUrl(..)) Кстати, в с++ с этим кешированием отдельного ресурса страницы та же проблема, как в 4.5, так и в 4.6. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 23, 2009, 17:42 $20
Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: sendevent от Декабрь 23, 2009, 19:10 Цитата: serg_hd Также знаю что картинка отдаёт "Cache-Control:no-cache" и "Pragma:no-cache", так что с её стороны всё нормально. Цитата: serg_hd Кстати, в с++ с этим кешированием отдельного ресурса страницы та же проблема, как в 4.5, так и в 4.6. как проверял? или это маркетинговый ход? :-\win XP + nmake + Qt 4.6: если документ с сервера приходит с "no-cache" - он и не попадает в кеш изначально. думаю, стоит разбераться, кто и когда сохраняет картинку - возможно, криво портирован сам вебкит. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 23, 2009, 19:31 проверяли также как и jambi: грузили одновременно неск. qwebview, каждая из которых была под своей прокси (чтобы mail.ru считал хосты, так наиболее удобно проверять - и результат налицо). Засчитывается всегда только 1й qwebview, остальные берутся уже из кеша. Т.е. сколько бы вы в проге qwebview не запустили, всегда будет только +1. Один компетентный (в чём я не сомневаюсь даже) программист, из этого форума 1.5 дня почти с этим тоже ковырялся (за что отдельное спасибо). Вывод пока остался один - это делает кеш самой webkit (не qwebkit, он только надстройка как известно). Никакие обходы пока найдены не были.
Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: ритт от Декабрь 23, 2009, 19:48 Оо
> Засчитывается всегда только 1й qwebview можно подробнее?? и при чём тут кэширование?) сейчас я склонен поверить sendevent на слово - что кэширование отрабатывает корректно... Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 23, 2009, 19:57 Оо При том, что остальные qwebview (точнее их NetworkAccessManager ) обращается для прорисовки этой картинки в кеш, а не в инет, несмотря на то, что картинка выдаёт cach-control:no-cache.> Засчитывается всегда только 1й qwebview можно подробнее?? и при чём тут кэширование?) Это легко доказуемо, если прописать рандом к картинке со стороны скрипта сайта, в этом случае обращение всегда будет в инет и засчитываться будут все. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: ритт от Декабрь 24, 2009, 07:30 установка прокси совсем необязательно приводит к дополнительному унику )
я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет? Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: niXman от Декабрь 24, 2009, 07:36 Цитировать установка прокси совсем необязательно приводит к дополнительному унику ) поясните пожалуйста.Цитировать я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет? если да, то и мне любопытно)Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 24, 2009, 14:40 я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет? Нет, мы говорим об отмене кеширования любой картинки страницы сайта.>>установка прокси совсем необязательно приводит к дополнительному унику ) что касается счётчика, то ему нужен уникальный ip, прокси это позволяет. Если есть другие приёмы - рад выслушать. Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: ритт от Декабрь 24, 2009, 17:33 проверяли также как и jambi: грузили одновременно неск. qwebview, каждая из которых была под своей прокси (чтобы mail.ru считал хосты, так наиболее удобно проверять - и результат налицо). Засчитывается всегда только 1й qwebview, остальные берутся уже из кеша. Т.е. сколько бы вы в проге qwebview не запустили, всегда будет только +1. Один компетентный (в чём я не сомневаюсь даже) программист, из этого форума 1.5 дня почти с этим тоже ковырялся (за что отдельное спасибо). Вывод пока остался один - это делает кеш самой webkit (не qwebkit, он только надстройка как известно). Никакие обходы пока найдены не были. я правильно понимаю, проверяли, загружая счётчик мэйл.рю, который накручивался лишь при первом обращении, из чего сделали вывод о кривости кэширования? или как-то ещё проверяли?Название: Re: QNetworkAccessManager: отмена кеширования документа Отправлено: serg_hd от Декабрь 24, 2009, 21:17 Ну естесственно проверял)
Сам написал на php скрипт - вывод картинки. Картинка показывает случайный набор символов. Выдаёт хедерами "no-cach", всё как у mail.ru. Первый qwebview вывел один набор символов, остальные вывели тот же набор. |