【问题标题】:Create a proxy within the iOS app在 iOS 应用中创建代理
【发布时间】:2012-03-15 08:01:49
【问题描述】:

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

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

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

你知道这是否可行,如果可行,我应该用什么来做到这一点? 或者......你知道是否已经做过类似的事情(一些 Objective-C 代理?)?

【问题讨论】:

标签: iphone objective-c uiwebview proxy


【解决方案1】:

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

UIWebView 将遵循 HTTP 标头。

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

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

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

您可能希望在您的代码中使用ASIWebPageRequestProxyingUIWebView,或者自己从它们的实现中获得想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多