Russian Qt Forum
Ноябрь 01, 2024, 08:26
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QNetworkAccessManager: отмена кеширования документа
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QNetworkAccessManager: отмена кеширования документа (Прочитано 9531 раз)
serg_hd
Хакер
Offline
Сообщений: 668
QNetworkAccessManager: отмена кеширования документа
«
:
Декабрь 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():
Код
Java
myReq.
setUrl
(
new
QUrl
(
url2
+
"&x="
+
rand.
nextInt
(
1000000
)
)
)
;
в надежде, что урл каждый раз будет разный и прога не будет обращаться к кешу, не проканало. Хотя если после этого проверить (myReq.url()), то он действительно изменённый с рандомом.
Также была куча других вариантов, не столь внушающих надежды как эти.
Интересно то, что если к адресу картинки в самом скрипте сайта добавить какой-нибудь random(), то картинка действительно не кешируется! Почему этого же не делает программа, вот что странно.
Также знаю что картинка отдаёт "Cache-Control:no-cache" и "Pragma:no-cache", так что с её стороны всё нормально. Не кешировать отдельно картинку надо для того, чтобы не отключать весь кеш, хотя в таком случае бы всё работало как надо, но сильно влияет на скорость работы, это и понятно.
«
Последнее редактирование: Декабрь 15, 2009, 18:58 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #1 :
Декабрь 15, 2009, 17:59 »
Также не помогло закидываение реквеста с картинкой в NetworkAccessManager, который для QNetworkDiskCache выполняет setMaximumCacheSize(0).
QNetworkDiskCache наверно считается как "дополнительный" (если необоходимо) кэш? Т.к. указанный в setCacheDirectory() каталог он всё же создаёт.
«
Последнее редактирование: Декабрь 15, 2009, 18:35 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #2 :
Декабрь 16, 2009, 13:35 »
Проблема, наверно, в том, что
Код
Java
myReq.
setUrl
(
new
QUrl
(
url2
+
"&x="
+
rand.
nextInt
(
1000000
)
)
)
;
надо делать раньше чем в методе createRequest(), но вот где...
Кстати, если при new QUrl() будет какая-нибудь php-страница, то не кешируется даже без применения рандома.
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #3 :
Декабрь 21, 2009, 20:33 »
Нахождение решения проблемы - $15. icq: 25-00-25-75пять
«
Последнее редактирование: Декабрь 21, 2009, 20:40 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
ритт
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #4 :
Декабрь 23, 2009, 17:07 »
попробуй
req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false);
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
и в setUrl нужно не
myReq.setUrl(new QUrl(..))
а
myReq.setUrl(QUrl(..))
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #5 :
Декабрь 23, 2009, 17:17 »
Цитата: Константин от Декабрь 23, 2009, 17:07
попробуй
req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false);
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
тоже пробовал, безрезультатно (забыл указать в первом посте, просто слишком много вариантов уже было)
Цитата: Константин от Декабрь 23, 2009, 17:07
и в setUrl нужно не
myReq.setUrl(new QUrl(..))
а
myReq.setUrl(QUrl(..))
Это в с++ наверное так, у меня jambi (java), там только через экземпляр объекта. Такое впечателине, что QNetworkAccessManager в первую очередь смотрит какой адрес нужен qwebview, а на программера внимания уже особо не обращает)). Меняй не меняй - как об стену.
Кстати, в с++ с этим кешированием отдельного ресурса страницы та же проблема, как в 4.5, так и в 4.6.
«
Последнее редактирование: Декабрь 23, 2009, 17:22 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #6 :
Декабрь 23, 2009, 17:42 »
$20
Записан
kubuntu/Win7/x64/NetBeans
sendevent
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #7 :
Декабрь 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" - он и не попадает в кеш изначально.
думаю, стоит разбераться, кто и когда сохраняет картинку - возможно, криво портирован сам вебкит.
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #8 :
Декабрь 23, 2009, 19:31 »
проверяли также как и jambi: грузили одновременно неск. qwebview, каждая из которых была под своей прокси (чтобы mail.ru считал хосты, так наиболее удобно проверять - и результат налицо). Засчитывается всегда только 1й qwebview, остальные берутся уже из кеша. Т.е. сколько бы вы в проге qwebview не запустили, всегда будет только +1. Один компетентный (в чём я не сомневаюсь даже) программист, из этого форума 1.5 дня почти с этим тоже ковырялся (за что отдельное спасибо). Вывод пока остался один - это делает кеш самой webkit (не qwebkit, он только надстройка как известно). Никакие обходы пока найдены не были.
Записан
kubuntu/Win7/x64/NetBeans
ритт
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #9 :
Декабрь 23, 2009, 19:48 »
Оо
> Засчитывается всегда только 1й qwebview
можно подробнее?? и при чём тут кэширование?)
сейчас я склонен поверить sendevent на слово - что кэширование отрабатывает корректно...
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #10 :
Декабрь 23, 2009, 19:57 »
Цитата: Константин от Декабрь 23, 2009, 19:48
Оо
> Засчитывается всегда только 1й qwebview
можно подробнее?? и при чём тут кэширование?)
При том, что остальные qwebview (точнее их NetworkAccessManager ) обращается для прорисовки этой картинки в кеш, а не в инет, несмотря на то, что картинка выдаёт cach-control:no-cache.
Это легко доказуемо, если прописать рандом к картинке со стороны скрипта сайта, в этом случае обращение всегда будет в инет и засчитываться будут все.
«
Последнее редактирование: Декабрь 23, 2009, 20:07 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
ритт
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #11 :
Декабрь 24, 2009, 07:30 »
установка прокси совсем необязательно приводит к дополнительному унику )
я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет?
Записан
niXman
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #12 :
Декабрь 24, 2009, 07:36 »
Цитировать
установка прокси совсем необязательно приводит к дополнительному унику )
поясните пожалуйста.
Цитировать
я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет?
если да, то и мне любопытно)
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #13 :
Декабрь 24, 2009, 14:40 »
Цитата: Константин от Декабрь 24, 2009, 07:30
я надеюсь, мы тут не про счётчик мэйл.рю говорим, нет?
Нет, мы говорим об отмене кеширования любой картинки страницы сайта.
>>установка прокси совсем необязательно приводит к дополнительному унику )
что касается счётчика, то ему нужен уникальный ip, прокси это позволяет. Если есть другие приёмы - рад выслушать.
Записан
kubuntu/Win7/x64/NetBeans
ритт
Гость
Re: QNetworkAccessManager: отмена кеширования документа
«
Ответ #14 :
Декабрь 24, 2009, 17:33 »
Цитата: serg_hd от Декабрь 23, 2009, 19:31
проверяли также как и jambi: грузили одновременно неск. qwebview, каждая из которых была под своей прокси (чтобы mail.ru считал хосты, так наиболее удобно проверять - и результат налицо). Засчитывается всегда только 1й qwebview, остальные берутся уже из кеша. Т.е. сколько бы вы в проге qwebview не запустили, всегда будет только +1. Один компетентный (в чём я не сомневаюсь даже) программист, из этого форума 1.5 дня почти с этим тоже ковырялся (за что отдельное спасибо). Вывод пока остался один - это делает кеш самой webkit (не qwebkit, он только надстройка как известно). Никакие обходы пока найдены не были.
я правильно понимаю, проверяли, загружая счётчик мэйл.рю, который накручивался лишь при первом обращении, из чего сделали вывод о кривости кэширования? или как-то ещё проверяли?
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...