Google Chrome 在存在缓存清单时从缓存中获取 HTML 个文件
Google Chrome fetches HTML files from cache when cache manifest is present
我有一个网站,我在其中添加了 CACHE MANIFEST 文件。这是为了确保 iOS 中的 full-screen 网络应用程序不会从缓存中获取内容。 (否则,它们似乎正确刷新 HTML,但未链接 JavaScript 或 CSS。)在我的应用程序中,off-line 访问完全没用,因此我创建了清单以不缓存任何东西。这是它的样子:
CACHE MANIFEST
# Version 1.0
NETWORK:
*
这解决了我在 iOS 中的问题,但似乎弄乱了 Chrome (40.0.2214.115 m)。 Chrome 坚持总是从缓存中获取我的基本 html 文件,即使开发工具打开并 "Disable cache" 检查也是如此。如果我可以简单地 remove/rename 缓存清单文件并刷新,就可以解决问题。
此外,我的基础 HTML 文件有这些 headers:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
这里有我遗漏的东西吗?似乎很奇怪 Chrome 会做 more 缓存,当我有一个清单文件说要做 no 缓存时。
如果您在 HTML 文件中指定缓存清单,它将始终缓存到 applicationCache,无论它是否具有您发布的指定 headers/meta-tags(请参阅此处 Cache manifest caches network files).
如果您想避免缓存 JS 和 CSS 文件,只需使用 Web 应用程序根目录中的 .htaccess
文件。
例如使用 "ExpireByType" 命令:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/plain "access plus 0 seconds"
ExpiresByType text/javascript "access plus 0 seconds"
ExpiresByType text/css "access plus 0 seconds"
ExpiresByType image/png "access plus 0 seconds"
ExpiresByType image/jpg "access plus 0 seconds"
ExpiresByType image/jpeg "access plus 0 seconds"
</IfModule>
此外,您可以添加以下行以完全禁用您的网络应用程序的缓存(请参阅此 Disabling Caching with .htaccess):
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Mon, 1 Jan 2010 01:00:00 GMT"
</ifModule>
此行为已在 Chrome 41.0.2272.76 m 中修复。它不再使用清单文件从我的站点的缓存中获取文件。
我有一个网站,我在其中添加了 CACHE MANIFEST 文件。这是为了确保 iOS 中的 full-screen 网络应用程序不会从缓存中获取内容。 (否则,它们似乎正确刷新 HTML,但未链接 JavaScript 或 CSS。)在我的应用程序中,off-line 访问完全没用,因此我创建了清单以不缓存任何东西。这是它的样子:
CACHE MANIFEST
# Version 1.0
NETWORK:
*
这解决了我在 iOS 中的问题,但似乎弄乱了 Chrome (40.0.2214.115 m)。 Chrome 坚持总是从缓存中获取我的基本 html 文件,即使开发工具打开并 "Disable cache" 检查也是如此。如果我可以简单地 remove/rename 缓存清单文件并刷新,就可以解决问题。 此外,我的基础 HTML 文件有这些 headers:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
这里有我遗漏的东西吗?似乎很奇怪 Chrome 会做 more 缓存,当我有一个清单文件说要做 no 缓存时。
如果您在 HTML 文件中指定缓存清单,它将始终缓存到 applicationCache,无论它是否具有您发布的指定 headers/meta-tags(请参阅此处 Cache manifest caches network files).
如果您想避免缓存 JS 和 CSS 文件,只需使用 Web 应用程序根目录中的 .htaccess
文件。
例如使用 "ExpireByType" 命令:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/plain "access plus 0 seconds"
ExpiresByType text/javascript "access plus 0 seconds"
ExpiresByType text/css "access plus 0 seconds"
ExpiresByType image/png "access plus 0 seconds"
ExpiresByType image/jpg "access plus 0 seconds"
ExpiresByType image/jpeg "access plus 0 seconds"
</IfModule>
此外,您可以添加以下行以完全禁用您的网络应用程序的缓存(请参阅此 Disabling Caching with .htaccess):
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Mon, 1 Jan 2010 01:00:00 GMT"
</ifModule>
此行为已在 Chrome 41.0.2272.76 m 中修复。它不再使用清单文件从我的站点的缓存中获取文件。