在iOS应用中创建代理

时间:2012-02-24 21:07:45

标签: iphone objective-c uiwebview proxy

我有一个带有UIWebView的应用程序(与网站连接);用户将导航到该网站。之后,我希望当用户打开应用程序并且没有连接时,可以访问已访问过的页面。

所以我觉得如果我在app中创建一个内部代理应该是可能的:每个请求都将由这个代理处理(并将结果发送到UIWebView)。当然,代理应该缓存网页,如果没有可用的连接,则使用缓存的页面。

我更喜欢这种方法而不是其他方法(HTML5离线缓存),因为在将来,我可以为代理设置一些功能,例如“我想在接下来的5个小时内缓存所有图片”等。

你知道它是否可能,如果是的话,我应该用它来做什么? 或者......你知道是否已经有类似的东西(某些Objective-C代理?)?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用HTTP缓存机制。您可以在Web服务器上设置HTTP标头吗?如果是这样,您可以为网站上的每个图片或其他资源设置max-age,使其在缓存中保留一段时间。

UIWebView将支持HTTP标头。

这是最简单的方法,但它是有限的。 iOS设置了某些缓存大小限制。大型资源可能无法缓存,或者可能会从缓存中快速启动其他资源。

另一种方法是使用NSURLRequest发送您自己的资源请求,并指定NSURLRequestUseProtocolCachePolicy标志。您可以尊重Web服务器缓存,也可以覆盖它。在这种情况下,iOS会为您处理缓存。问题是您无法为UIWebView指定代理。这意味着您必须自己管理代理的重定向。您需要分析网站内容并捕获图像,CSS,javascript等的内部请求。

另一种方法是处理请求和自己缓存。这显然是最费力的方式,但你手上可以完全掌控。

您可能希望在代码中使用ASIWebPageRequestProxyingUIWebView,或者自己从实施中获取想法。