2012-02-24 1 views
2

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

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

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

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

+0

Для простой реализации этого, а также обсуждения того, как создавать более сложные реализации, см. Http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588 –

ответ

0

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

UIWebView будет соблюдать HTTP-заголовки.

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

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

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

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

Смежные вопросы