相关疑难解决方法(0)

使用<meta>标签关闭所有浏览器的缓存?

我读到,当您无法访问Web服务器的标头时,您可以使用以下命令关闭缓存:

<meta http-equiv="Cache-Control" content="no-store" />
Run Code Online (Sandbox Code Playgroud)

但我也读到这在某些版本的IE中不起作用.是否有任何<meta>标签可以关闭所有浏览器中的缓存?

html firefox internet-explorer caching asp.net-web-api

427
推荐指数
5
解决办法
76万
查看次数

如何在ASP.NET核心rc2中禁用浏览器缓存?

我尝试过这个中间件,但浏览器仍在保存文件.

我希望用户将始终获得js和css文件的最新版本.

public void Configure(IApplicationBuilder app)
{
    app.UseSession();
    app.UseDefaultFiles();
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = context =>
            context.Context.Response.Headers.Add("Cache-Control", "no-cache")
    });
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-core-mvc

23
推荐指数
3
解决办法
2万
查看次数

为什么即使禁用了缓存,服务器也会忽略代码文件中的更改?

我在我的本地主机(Windows 7,Chrome v79.0.3945.130(64 位))上测试了一个 html/js 代码,大约 50% 的时间代码更改没有反映在浏览器中(我用开发工具/源看到它)。
互联网上有很多建议,但似乎都不起作用:

  • 右键单击重新加载并选择“清空缓存和硬重新加载” - 在 30% 的情况下没有帮助。
  • 在 Chrome 开发工具的网络选项卡中禁用缓存 - 没有帮助。
  • 添加<meta http-equiv="Cache-control" content="no-cache">在标题中 - 没有帮助。
  • 替换<script src="common.js"></script><script src="common.js?blabla"></script>- 在 60% 的情况下有帮助,但是您需要在每次更改后都执行此操作是一项繁重的工作。此外,它不适用于 html 更改。
  • 将文件复制到新文件(如 index.html 到 index2.html)并替换代码中的文件名 - 总是有效,但它是一个更大的苦差事。

当我将代码提交到 github.io 时出现完全相同的问题

请帮我制作它,以便网站立即反映代码更改。


编辑:我创建了一个文件 index3.html 并在那里只放了“hello world”。在浏览器中打开文件。改为“hello world2”——浏览器更新了内容。更改为“hello world3” - 即使在多次重新加载和“清空缓存和硬重新加载”之后,浏览器仍然显示“hello world2”。我改为“hello world4”——浏览器仍然显示“hello world2”。4 个小时后,我改为“hello world5”——浏览器仍然显示“hello world2”。我用基本记事本编辑了这个文件。


Edit2:人们一直在问我正在使用什么服务器。这看起来是问题的一部分。不幸的是,我不知道,也不知道我到底需要做什么来检查它。以下是我迄今为止发现的所有内容:

  • 我有inetpub/wwwroot放置 html 和 js 文件的目录,然后在浏览器中打开 index.html http://localhost/
  • Devs Tools 中的我的网络面板如下所示:image link
  • 服务器设置非常快,不需要安装任何额外的软件。即我没有使用 …

html javascript iis-7 browser-cache server

16
推荐指数
2
解决办法
4830
查看次数

如何将<clientCache />设置应用于IIS中的特定扩展?

我在Azure上使用以下Web.config托管Web应用程序:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".text" mimeType="text/plain" />
      <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这有效,但我想通过扩展来改变缓存时间.我想将.html文件的最大年龄设置为1天,将其他所有文件的最大年龄设置为365天.原因是html中的所有资产都有其文件名在更改时加速并且是从CDN提供的,因此它们永远不需要过期,但是html页面本身需要始终保持新鲜,以便用户可以看到新内容.

我看到该<location>元素允许将Web.config过滤到特定位置,但我没有看到将其限制为某些扩展的方法.

请注意,我不要求能够做到这一点在Web.config:任何可能的手段与Azure的Web应用程序的罚款.

iis web-config azure azure-web-sites

10
推荐指数
1
解决办法
2081
查看次数

angular-cli 的 --output-hashing 总是应该与延迟加载的模块一起使用吗?

我以为我已经成功地缓存破坏了 angular-cli 的--output-hashing选项设置all为确保用户获得最新的块/更新。我意识到这并不总是适用于延迟加载的模块。

如果我对延迟加载模块 + 构建 + 部署到 IIS进行更改,并转到属于延迟加载模块的 URL,那么我会按预期获得最新更改。

但是,如果我关闭并重新打开浏览器并转到不属于延迟加载模块的 URL,然后单击将我带到延迟加载模块的链接,则不会观察到最新更改。

几乎就像浏览器假设每当我从未更改的模块进入应用程序时没有任何更改,并且稍后在我访问更改的模块时不会选择新块。

更奇怪的是,当我尝试复制问题以提供一些屏幕截图时,问题就消失了。

有没有其他人遇到过使用输出哈希与缓存破坏不一致的情况?

编辑:

进一步调查后,事实证明,如果我转到我网站的着陆页 [IP 地址]:[端口],那么 index.html 来自缓存。

相反,如果我转到任何其他路由 [IP 地址]:[端口]/[路由],那么 index.html 来自服务器。

由于 index.html 指向 inline.(hash).bundle.js,后者又指向延迟加载的模块,因此获取 index.html 的旧副本会导致获取旧版本的 inline.js 和其他模块。

我尝试添加<meta http-equiv="expires" content="0" />到 index.html 并清除浏览器缓存,但仍然从缓存中获取文件。

我也尝试在 web.config 中添加一个部分,但这也不起作用。

如何确保 index.html 始终来自服务器?

在此处输入图片说明

angular-cli angular

5
推荐指数
1
解决办法
2万
查看次数

.Net Core Angular 5网站中的缓存清除index.html

我正在使用.Net core和angular 5创建一个网站。我使用最新的.Net core angular template(dotnet new angular与安装的.Net core 2.1一起使用)创建了该项目。

该项目使用angular cli来构建/打包并将哈希应用于绑定的js和css文件:

在此处输入图片说明

但是,将网站发布到azure应用程序服务后,我发现当浏览到该网站时,会看到旧版本,直到用F5手动刷新(不需要Ctrl-F5)。这似乎是因为尽管js / css文件不会被缓存,但包含这些文件引用的index.html页面将从缓存中提供。

当我按F5重新加载网站时,home从网站请求index.html(以下)(本例中为304,因为它没有更改,如果有,它将获取最新的):

在此处输入图片说明

但是,当我最初加载页面(通过书签或输入地址等)时,直接从缓存中提供页面:

在此处输入图片说明

这是预期的行为吗?为什么第一次加载页面与按F5相比有何不同?并且我可以防止缓存吗?

browser-cache .net-core angular-cli angular

4
推荐指数
2
解决办法
1792
查看次数