Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 缓存控制:在Safari中重新加载页面之前,请求头响应中的无缓存不会替换以前缓存的响应_Ios_Angularjs_Http_Safari_Browser Cache - Fatal编程技术网

Ios 缓存控制:在Safari中重新加载页面之前,请求头响应中的无缓存不会替换以前缓存的响应

Ios 缓存控制:在Safari中重新加载页面之前,请求头响应中的无缓存不会替换以前缓存的响应,ios,angularjs,http,safari,browser-cache,Ios,Angularjs,Http,Safari,Browser Cache,我在Safari和混合iOS应用程序中使用AngularJS 我有一个HTTP响应,它使用以下头缓存了10分钟。此响应将被缓存。我们将在步骤1中将此响应称为A 缓存控制:公共,最大年龄=600 这将被正确缓存,10分钟后,将发出一个新请求 但是,我有一个逻辑,它会导致客户端忽略缓存,因为某些事件会在再次请求时更改响应。当这些事件发生时,我使用以下请求头发出了一个新的HTTP请求,以绕过缓存并获得新的响应。这些头是请求之间唯一的区别。这是第二步 缓存控制:没有缓存,没有存储,必须重新验证 Prag

我在Safari和混合iOS应用程序中使用AngularJS

我有一个HTTP响应,它使用以下头缓存了10分钟。此响应将被缓存。我们将在步骤1中将此响应称为A

缓存控制:公共,最大年龄=600

这将被正确缓存,10分钟后,将发出一个新请求

但是,我有一个逻辑,它会导致客户端忽略缓存,因为某些事件会在再次请求时更改响应。当这些事件发生时,我使用以下请求头发出了一个新的HTTP请求,以绕过缓存并获得新的响应。这些头是请求之间唯一的区别。这是第二步

缓存控制:没有缓存,没有存储,必须重新验证
Pragma:没有缓存
过期:{当前日期时间}

此响应(响应B)与响应A相同,只是它在主体中具有不同的信息。除了日期响应头之外,响应头是相同的。发出此请求成功绕过缓存并从服务器检索新资源,一切正常

但是,此新响应不会替换缓存中以前的响应。例如,如果我导航到另一个页面(这不会导致页面重新加载,因为我的应用程序是使用AngularJS的SPA),然后导航回发出与步骤1相同请求的页面,它会得到响应a而不是响应B。我希望返回响应B

这只是Safari中的一个问题。Chrome和IE可以正常工作,将来的任何请求都会返回响应B

但是在Safari中,如果我重新加载页面(
⌘ + R
),它将完全忽略缓存,并对同一资源发出全新的请求。如果我在SafariURL栏中按enter键,它不会忽略缓存,但仍然使用响应A

如何让Safari像其他浏览器一样,在发出绕过缓存的新请求时替换缓存的响应

总结如下:

  • 发出请求,但不在request中设置缓存控制标头。获取名为response A的缓存控制头的响应

  • 使用显式缓存控制、Pragma和Expires请求头生成新请求,这些请求头绕过请求,获得更新的响应B

  • 导航到别处,然后返回,像步骤1一样发出新请求。我希望得到响应B,但得到响应A。步骤2中的响应B并不替换响应A,即使响应头基本相同(日期头除外),并且主体不同