Http <link type="prefetch" vs. pragma: no-cache

Posted

技术标签:

【中文标题】Http <link type="prefetch" vs. pragma: no-cache【英文标题】: 【发布时间】:2014-06-09 23:11:12 【问题描述】:

如果 html 页面具有指向具有无缓存 pragma 标头的资源的预取链接,会发生什么?

【问题讨论】:

您在测试时观察到了什么?为什么你认为两者会相互影响? 好吧,我只看过谷歌浏览器网络窗格,我看到每个预取请求都被取消了。 文档说当开发者工具打开时预取(“预渲染”)被中止:developers.google.com/chrome/whitepapers/prerender 所以我可以检查是否发生了预渲染,但不知道如何? 如果我正确理解 prefetch 指示浏览器在其“空闲时间”缓存链接的资源,并且 pragma: no-cache 指示浏览器不缓存某些内容。我认为这两个东西会在某个时候相互干扰。这个问题只是一个理论问题:根据 rfc 或浏览器实现,是否会发生某些事情,也许是通过取消预取请求?也许浏览器很笨,会下载链接的资源,但是在加载需要该资源的页面时会再次下载... 【参考方案1】:

但是如果它加载一个资源而没有实际使用它,它会在后续请求中被丢弃吗?

这取决于浏览器。 IE11 操作如下:

预呈现的页面并不总是显示给用户。这些情况会导致预呈现的页面从内存中被丢弃而不显示:

The user doesn't open the target page within five minutes.
The user opens a different page.
The user switches to a different tab or browser instance.
A javascript process adds a new link element that requests a different webpage to prerender.
An error occurs while loading the target page, including HTTP error code 500 (server error), 404 (resource not found), or related errors (such as connection problems).

当预先呈现的页面被丢弃并稍后请求时,它会直接从托管服务器加载。如果页面仍在浏览器缓存中,它可能会加载得更快;但是,这不能保证。

参考文献

Prerender and prefetch support

【讨论】:

【参考方案2】:

所有浏览器(支持预取)都会在空闲时间加载文档(使用Pragma: no-cache 或/和Cache-Control: no-cache)所以我们想知道他们是从缓存中获取它还是会请求它当用户实际“点击”链接时再次。

根据我最近所做的快速调查(浏览器是最新版本):

Chrome/Opera 从缓存中加载 Firefox 再次请求 IE/Edge 再次请求 Safari 不支持

所以我建议为要预取的资源设置一些缓存期(例如 5-10 分钟),如果您希望它从基于铬以外的浏览器的缓存中获取。

【讨论】:

以上是关于Http <link type="prefetch" vs. pragma: no-cache的主要内容,如果未能解决你的问题,请参考以下文章

<link rel="preload" 的 `type` 值不受支持(字体预加载)

网页制作。。请问link到底要放在哪里!!??

<link rel="stylesheet" type="text/css" href="css/style.css"

<link />和<script />引入 有啥区别

link 与 @import 区别

jsp修改地址栏图标 我试过在head中加<link rel=”icon” href=”/favicon.ico”>,但是都没有用。为啥?