Главная
Форум
Контакты
Купить
Поддержи проект
Поиск
Искать:
Расширенный поиск
[Закрыть]
Правила форума
Войти
Регистрация
Russian
English
HandyCache форум
Главная категория
»
Общие вопросы
»
Content-Type при отдаче из кэша
Имя пользователя:
1 час
1 день
1 неделя
1 месяц
Навсегда
Пароль:
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Отправить эту тему
Печать
Автор
Тема: Content-Type при отдаче из кэша (Прочитано 4006 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Inversion
Новичок
Репутация: +6/-0
Offline
Сообщений: 17
Content-Type при отдаче из кэша
«
:
26 марта 2012, 14:56:21 »
Здравствуйте.
Есть проблемка.
При кэшировании объекта с хедером Content-Type: application/json; charset=utf-8 (GET запрос вида domain.com/ajax/getProviders).
Он потом отдается HC из кэша без какого-либо Content-Type, и это портит работу некоторых других обработчиков, которые полагаются на Content-Type.
Только что обновил HC, думал, может это уже исправлено, но нет, в последней версией HC работает так же.
Надеюсь, что это можно поправить…
Спасибо.
PS: Несколько раз попробовал воспользоваться формой для отправки сообщения автору, но получал alert с текстом, что недостаточно прав для просмотра этой страницы. Так и не знаю, ушло мое сообщение, или нет, поэтому решил еще и тему создать.
Сообщить модератору
Записан
mai62
Автор HC
Репутация: +226/-4
Offline
Сообщений: 6383
Re: Content-Type при отдаче из кэша
«
Ответ #1 :
27 марта 2012, 13:14:29 »
Аpplication/json - это вероятно данные, которые гоняют через сеть приложения. Скорее всего их вообще не нужно кэшировать. Есть какие-то признаки в URL или содержимом, по которым их можно распознать?
Сообщить модератору
Записан
Inversion
Новичок
Репутация: +6/-0
Offline
Сообщений: 17
Re: Content-Type при отдаче из кэша
«
Ответ #2 :
27 марта 2012, 14:49:52 »
> Аpplication/json - это вероятно данные, которые гоняют через сеть приложения.
В моем случае это на сайте при работе в таком виде приходят ответы на внутренние ajax запросы (которые работают без обновления страницы).
> Скорее всего их вообще не нужно кэшировать.
Очень даже нужно. Я работаю с сайтом, данные на которую загружаются таким вот методом. Данные эти не изменяются, то есть каждый раз из сервера грузятся те самые. С помощью HC я настроил кэширование этих данных, и могу не зависеть от отклика сервера. В результате вместо полминуты ожидания результатов всех запросов из сервера, всё работает моментально. Такое вот принудительное кэширование веб-приложения для более быстрой работы. Не для этого ли создавался HC?
Недавно что-то на сервере поменяли, и данные начали приходить с другим хедером. Теперь моя система не работает корректно, так как HC теперь отдает эти данные без параметра Content-Type вообще.
> Есть какие-то признаки в URL или содержимом, по которым их можно распознать?
В URL точно нет, а вот по содержимому можно определить, что это json, но нужно анализировать. Безопаснее было бы вместе с кэшем хранить оригинальные хедеры, которые были в ответе сервера (возможно только в тех случаях, когда это не можно определить по контенту файла в кэше).
Сообщить модератору
Записан
mai62
Автор HC
Репутация: +226/-4
Offline
Сообщений: 6383
Re: Content-Type при отдаче из кэша
«
Ответ #3 :
27 марта 2012, 16:07:47 »
Цитировать
Безопаснее было бы вместе с кэшем хранить оригинальные хедеры, которые были в ответе сервера
Я согласен с Вами. Но дело обстоит так, что заголовки ответов не хранятся, и это не изменишь щелчком пальцев. Поэтому ищу за что можно зацепиться.
Цитировать
возможно только в тех случаях, когда это не можно определить по контенту файла в кэше
Заголовок надо записывать на этапе записи файла, а определение контента делается при выдаче из кэша (и как показала практика в большинстве случаев этого достаточно). Если при записи еще пытаться определить контент, то будет лишняя нагрузка на компьютер.
Сообщить модератору
Записан
Inversion
Новичок
Репутация: +6/-0
Offline
Сообщений: 17
Re: Content-Type при отдаче из кэша
«
Ответ #4 :
27 марта 2012, 16:58:25 »
В случае с JSON, подозреваю, что легче будет что-то записывать при сохранении, чем анализировать контент (очевидного признака вроде как нет).
>Если при записи еще пытаться определить контент, то будет лишняя нагрузка на компьютер.
Но ведь при записи тип известен из хедера и определять не нужно?
Получается оптимальная логика работы вроде такого:
Если пришел application/json (или какой-то другой трудно определимый по контенту тип данных), то вместе с кэшем сохраняем хедер; иначе — сохраняем только контент.
А при чтении из кэша наоборот: проверяем, если хедер сохранен вместе с кэшем — используем его, иначе — определяем по контенту, как сейчас.
Ну и, насколько я знаю, этих разных Content-Type есть больше количество, и могут же появляться новые. Неужели легче поддерживать в актуальном состоянии систему распознавания типа по контенту, чем просто сохранять то, что пришло в ответе от сервера?
Рас уж пошла речь о сохранении вместе с кэшем дополнительных данных, то есть смежная задача.
В HC можно включить кэширование POST запросов. И я пробовал это делать с той же описанной мною целью, когда на сайте используется POST для обмена данными с сервером. Ну и конечно напоролся на то, что URL у разных запросов получается одинаковый, и в результате для всех запросов при чтении из кэша возвращается одинаковый ответ, тот который был закэширован последним.
Если бы для таких запросов кроме url сохранялся хэш/чексумма (sha1, md5…) от данных, которые передаются, то можно было бы различать разные POST запросы ну и определять те, которые уже закэшированы.
Как вариант, этот хэш можно было бы приписывать к имени сохраняемого файла (если хэш-функция точно не использует специальные символов в генерируемых результатах).
Аналогично, можно было бы и тип данных прописывать как-то в имени сохраняемого файла, чтобы не создавать дополнительные файлы, но формат нужно придумать какой-то такой, чтобы точно в реальных названиях файлов не встречался.
Ну вот написал всё, что крутилось в голове. Возможно что-то пригодится…
Сообщить модератору
Записан
mirny
Пользователь
Репутация: +11/-1
Offline
Сообщений: 84
Re: Content-Type при отдаче из кэша
«
Ответ #5 :
27 марта 2012, 17:05:08 »
Пришло время напомнить, что эта проблема уже как-то обсуждалась.
http://handycache.ru/component/option,com_smf/Itemid,10/topic,980.20/#msg32112
Сообщить модератору
Записан
Zoynels
Новичок
Репутация: +1/-0
Offline
Сообщений: 42
Re: Content-Type при отдаче из кэша
«
Ответ #6 :
02 апреля 2012, 18:28:34 »
Inversion, проще всего написать скрипт lua чтобы добавлялся Content-Type именно для твоих запросов.
Цитировать
у тебя например такой изначальный заголовок:
hc.answer_header = 'HTTP/1.1 200 OK\r\nLocation: domain.com/ajax/getProviders\r\n\r\n\r\n'
далее функцией
function AnswerHeaderReceived()
hc.answer_header = re.replace(hc.answer_header, [[\r\n\r\n]] , 'Content-Type: application/json; charset=utf-8\r\n\r\n')
end
вот собственно и всё, вроде бы...
«
Последнее редактирование: 02 апреля 2012, 18:33:30 от Zoynels
»
Сообщить модератору
Записан
Inversion
Новичок
Репутация: +6/-0
Offline
Сообщений: 17
Re: Content-Type при отдаче из кэша
«
Ответ #7 :
02 апреля 2012, 19:24:51 »
Можно, конечно, но в перспективе получается лишняя работа под каждый конкретный сайт. Это не хорошо.
Но, спасибо за готовое решение для этого случая.
Сообщить модератору
Записан
Страниц: [
1
]
Вверх
Отправить эту тему
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Главная категория
-----------------------------
=> Общие вопросы
=> Новые предложения
=> Дополнения, плагины
=> Сжатие трафика
=> English forum
=> Indonesian forum
-----------------------------
Гостевая
-----------------------------
=> Гостевая
-----------------------------
Дела домашние
-----------------------------
=> Сайт и форум HandyCache
=> Курилка
© 2006-2014 HandyCache Team. Все права защищены.
Загружается...