如果您认真回答这个问题,请克隆我创建的迷你应用程序,看看它是否对您有同样的行为不当,然后再推测答案,谢谢 :)
https://github.com/pavel-zdenek/nsurlprotocol-testbed
一个非常简单的浏览器:UIWebView
所有请求都经过简单的NSURLProtocol
重新实现。它经过了加载时间。开关在运行时取消/注册协议处理程序。现在加载一个特定站点:http ://www.rollingstone.com 。除了大量其他资源之外,页面 GET
http://sjc.ads.nexage.com/js/admax/admax_api.js
这会产生一个 XHR 请求
http://sjc.mediation.nexage.net/admax/adMaxApi.do?dcn=<somehash>
PZProtocolHandler
OFF : XHR 立即加载。在网络上观察到 HTTP 200(鲨鱼),反映为 Safari Web Inspector 中的成功加载。在进一步加载时,它不再在线,但仍然是 Web Inspector 中的 HTTP 200。换句话说,缓存。
PZProtocolHandler
ON:Web Inspector 报告 3 次尝试,每次 10 秒后超时,导致 HTTP 404。进一步重新加载后没有变化。现在有趣的部分:根据wire(shark),请求发出并以正确的HTTP 200响应。此外,所有3次尝试都在一个相同的TCP通道上排序。“某人”沿途编造404 UIWebView
。
现在,甚至在阅读聪明的博客之前,我就发现当服务器响应不包含Cache-Control
标头时,iOS URL 缓存会变成热核。而这个特殊的 GET 请求就是这种情况。但它不应该导致 404 失败,不是吗?我还尝试通过各种方法使默认缓存休眠:实现与缓存相关的委托调用NSURLProtocol
,创建带有缓存禁止标志的新请求,使用预期的顶级知识SDURLCache
,甚至替换NSURLCache
我认为应该是“空缓存”的东西。查看项目源代码中的所有内容。
404 对我来说仍然存在。我怀疑仅仅覆盖的事实NSURLProtocol
会破坏这么多事情。我可以没有机会为此填补雷达,谢谢。我仍然希望我做错了什么。