【发布时间】:2021-02-21 16:33:20
【问题描述】:
缓存控制指令是否需要指定 http 请求中是否存在查询字符串以进行正确匹配?
目前使用查询字符串进行静态资产版本控制,并为这些字符串禁用 Etag - 但这些指令无论如何都不会生效。查看标头,仍然使用 Etag,并且没有定义缓存控制。 Gmatrix 和 Lighthouse 都声明静态资源没有缓存控制集。
请求的示例文件:app.js?v=1.3.5
这是 .htaccess 文件,然后是故障排除步骤
<IfModule mod_headers.c>
# One month for media files and icons
<FilesMatch "\.(ogg|mp3|ico|jpg|jpeg|png|svg|webp|webmanifest|xml)\?.*$">
Header set Cache-Control "max-age=2592000, public"
Header unset ETag
FileETag None
</FilesMatch>
# One week for CSS/JS files except service worker file
<FilesMatch "^(?!sw).+\.(css|json|js)\?.*$">
Header set Cache-Control "max-age=604800, public"
Header unset ETag
FileETag None
</FilesMatch>
# No cache for HTML files (checks with server for changes else serves cache)
<FilesMatch "\.(html)$">
Header set Cache-Control "no-cache, must-revalidate"
</FilesMatch>
<FilesMatch "^(sw\.js)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
</FilesMatch>
</IfModule>
问题排查步骤
指令似乎也不影响 html 页面,因此假设这可能是配置或语法问题。
- 使用验证器检查语法:https://www.lyxx.com/freestuff/002.html
- 确保在
/etc/apache2/sites-available/mysite.conf中将AllowOverride设置为All - 尝试将
/etc/apache2/apache2.conf中的AllowOverride设置为All以获取/var/www/ - 尝试直接在
/etc/apache2/sites-available/mysite.conf中添加指令 - 更改后重启 apache:
service apache2 restart
【问题讨论】:
标签: apache .htaccess http caching