Создайте прокси в приложении iOS - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть приложение с UIWebView (которое связано с веб-сайтом); пользователь перейдет на сайт. После этого я хочу, чтобы при открытии пользователем приложения и отсутствии связи уже посещенные страницы были доступны.

Так что я подумал, что это возможно, если я создам внутренний прокси в приложении: каждый запрос будет обрабатываться этим прокси (и отправлять результат в UIWebView). Конечно, прокси должен кэшировать веб-страницы и, если нет доступного соединения, использовать кэшированные страницы.

Я предпочитаю этот подход вместо других (автономный кеш HTML5), потому что в будущем я смогу установить некоторые функции для прокси-сервера, например «Я хочу кешировать все картинки в течение следующих 5 часов» и т. .

Знаете ли вы, возможно ли это, и если да, что я должен использовать для этого? Или ... вы знаете, если что-то подобное уже сделано (какой-нибудь Objective-C Proxy?)?

1 Ответ

0 голосов
/ 30 января 2013

Самый простой способ - использовать механизм кэширования HTTP.Можете ли вы установить заголовки HTTP на веб-сервере?Если это так, вы можете установить максимальный возраст для каждого изображения или другого ресурса на веб-сайте, чтобы хранить их в кэше в течение определенного времени.

UIWebView будет учитывать заголовки HTTP.

Самый простой способ, но он ограничен.Есть определенные ограничения размера кэша, установленные iOS.Большие ресурсы могут не кэшироваться или могут быстро выгружать другие ресурсы из кэша.

Другой способ - отправлять свои собственные запросы ресурсов с помощью NSURLRequest и указывать флаги NSURLRequestUseProtocolCachePolicy.Вы можете соблюдать кеширование на веб-сервере или можете изменить это.В этом случае iOS обрабатывает кеширование.Проблема в том, что вы не можете указать прокси для UIWebView.Это означает, что вам придется самостоятельно управлять перенаправлениями на ваш прокси.Вам нужно будет проанализировать содержимое веб-сайта и захватить внутренние запросы на изображения, CSS, javascript и т. Д.

Еще один способ - обрабатывать как запросы, так и кэширование самостоятельно.Это, очевидно, самый трудоемкий способ, но вы будете иметь полный контроль в своих руках.

Возможно, вы захотите использовать ASIWebPageRequest или ProxyingUIWebView в своем коде или получить идеиот их реализации для себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...