当访客访问http://www.yourwebpage.com/时
有没有办法让浏览器使用以前缓存的响应?或者它总是向服务器发出请求?
我猜测将会发生对服务器的请求,但是是否可以使用空字符串进行响应,并让浏览器自动使用缓存的响应来处理index.html?或者您总是必须提供完整的答案?
问题涉及基于 JS 的应用程序的初始 index.html 响应应包含多少内容,或者 index.html 响应是否应对 html 片段等发出第二次请求。
// Example: Pseudo code
<html> ...
<script>
if ( !localStorage.index ) {
localStorage.index = loadFromServer( 'head.html' )
}
document.head.append(localStorage.index);
</script>
...</html>
问题归结为,如果我有十个 templates.html 文件,我想提供一次,它们是否应该包含在 index.html 响应中,或者是否应该发出另一个请求来将它们作为一个包获取。
显然,如果我发出第二个请求,如果设置了正确的 header ,浏览器将缓存该响应,但这会花费另一个请求,至少是第一次。
如果我将它们包含在index.html中,那么初始响应将会更大,但小于否则必要的两个请求,但是如何处理后续获取index.html的请求?
我从未访问过不加载某些内容的页面,尽管理论上如果正确设置了先前请求的正确缓存 header ,则应该可以将其视为离线应用程序,或者缓存现在适用于初始应用程序要求?仅适用于例如通过 ajax 或
最后的陈述是真的吗?
基本上,您可以通过仅使用缓存数据访问网页来执行 JavaScript,而实际上不需要发出任何请求,或者至少等待答案。
这可能吗?也许将整个index.html存储在localStorage中是一种方法,并且让index.html响应第二次仅使用一个脚本标记来响应,说明从localStorage加载。
编辑 1
我开始了解到,至少 Firefox 中有一种称为 list 的东西,它可以进行诸如首次安装应用程序之类的处理。 https://developer.mozilla.org/en-US/Apps/Build/Manifest
最佳答案
是的,您的网络服务器(和/或网络应用程序框架)应该使用缓存 header 向浏览器提供此类指令。缓存 header 包括 etag 和缓存控制。完整的示例和解释如下:https://www.mnot.net/cache_docs/#CACHE-CONTROL
但基本上,它们告诉浏览器何时考虑获取的内容已过时,何时实际发出请求。此外,如果服务器知道信息尚未更改,它将使用 HTTP 304 响应进行响应,这将导致客户端也使用缓存的副本。
你真的不需要使用 localstorage 选项,除非你希望你的 JS 绝对不会向服务器询问某些东西,除非它不在 localstorage 中。问题是您必须管理自己的缓存失效等。
关于javascript - 在 Web 上缓存。浏览器中如何处理地址首次访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24850840/