【问题标题】:HTML5 manifest no cachingHTML5 清单没有缓存
【发布时间】:2016-07-04 23:57:21
【问题描述】:

您好,我有一个关于我的 .net Web 应用程序中没有缓存的问题。我有一个 XHTML Web 应用程序,它使用以下元标记运行:

<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />

我想让这个应用程序成为 HTML5 有效的应用程序。通过 HTML5 验证器运行它后,它将输出这些元标记无效。

我在互联网上做了一些研究,很多人建议使用清单文件,例如:

CACHE MANIFEST
# 2016-03-18 time 10:30 UTC v 1.01 
NETWORK:
*

这基本上是说:对于所有文件,不要从缓存中读取,而是从网络服务器中读取。这听起来像浏览器根本没有缓存它。但是这种方法的一个缺点是,正如post 中所说,每次执行(部分)回发时都需要更新清单文件。这听起来不是一个很好的正确方法。

所以我通过 web.config 调整通过我的 IIS 使用 HTTP 标头来搜索替代方法。我找到了一个来源,说您可以使用以下方法:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="no-cache" />
                <add name="Pragma" value="no-cache" />
                <add name="Expires" value="-1" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

不,我想知道这种方法是不缓存我的 web 应用程序的好方法吗?

【问题讨论】:

    标签: asp.net html caching


    【解决方案1】:

    CACHE MANIFEST 用于离线网络应用程序,它根本不是一个容易使用的东西,据我所知,甚至不推荐使用这种方式来制作离线应用程序。

    如果您不希望您的页面在浏览器中缓存,那么配置响应标头将是正确的方法。

    为了防止浏览器完全缓存页面,您可以设置以下标题:

    Cache-Control:no-store
    Cache-Control:no-cache
    Pragma:no-cache
    Expires:Fri, 18 Mar 1999 12:22:21 GMT
    

    请注意,Pragma 标头适用于 HTTP 1.0Cache-Control:max-age 相当于 Expires,但 Cache-Control:max-age 具有更高的优先级,因此没有理由同时拥有它们两个

    【讨论】:

    • 谢谢,我也可以通过我的 web.config 添加这些标头吗?如果我只想触发某个应用程序?顺便说一句:缓存控制应该包含无存储和无缓存?
    • 是的,您可以将剂量标头添加到您的服务器配置中并享受好处。我个人甚至会设置三个标头,以防万一 Cache-Control:no-store, no-cache, must-revalidate 但根据 Chrome 源代码,应该只使用:no-缓存
    【解决方案2】:

    使用您描述的清单文件,并使用 javascript 更新它:

    您的清单:

    CACHE MANIFEST
    # 2016-03-18 time 10:30 UTC v 1.01 
    NETWORK:
    *
    

    Javascript:

    var appCache = window.applicationCache;
    appCache.update();
    

    使用appcache的良好开端:A Beginner's Guide to Application Cache

    【讨论】:

    • 感谢您的回复。但这(使用清单文件)实际上是否与那些在 XHTML 中工作的元标记一样?而且是不是需要改变manifest文件的内容才能触发浏览器再次读取?
    • 是的,但是 appcache 可以做的更多。另外,您通常无权访问网络服务器的配置。 appcache 文件可以简单地放在您的网站文件夹中。
    • 是的,听起来很清楚。但我不明白的是,为什么每次进行(部分)回发时都必须更新?我只想禁用缓存,不缓存任何文件
    • 也许库尔特的提议是强制更新您的 HTML 页面中包含的相关文件。由于有了 META 标签,我们可以很容易地告诉浏览器我们不想缓存 HTML 页面……但对于相关文件来说并不那么容易。我要试一试,看看是否有效。 :))
    • 操作,目前不推荐使用 applicationCache:developer.mozilla.org/en-US/docs/Web/HTML/… 谈话,完全失去了我的兴趣。让我们继续使用 serviceWorkers。
    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2010-09-21
    • 2011-01-04
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多