Express JS - 静态文件不是从缓存中提供的
Express JS - Static files not being served from cache
我是 运行 Express 上的一个应用程序,我的浏览器一直在获取应该已经缓存的文件。违规文件的状态代码为 304,大小始终为 220 B / 221 B。其他资源(得到正确服务)显示“(来自缓存)”。
更多信息:ETags/文件内容没有改变,我设置了一些响应headers。
res.set('Cache-Control', 'max-age=345600');
res.set('Expires', new Date(Date.now() + 345600000).toUTCString());
(来源:imageno.com)
诚然,我不是 HTTP 专家,但也许有人可以帮助我理解为什么会发生这种情况?
本质上,浏览器正在缓存并提供缓存包(尽管它不显示“来自缓存”的消息)。为了服务它们,它向服务器发送请求并检查文件是否已更改。如果它没有改变,服务器发送一个 304 响应代码,浏览器从缓存中提取文件。这大约需要 15-50 毫秒,因此不会对性能产生重大影响。
但是,我可以强制浏览器显示文件而不发送验证请求(例如外部托管库)。这将需要为遥远的未来设置 expires/cache-control headers,time-stamping 静态资产的文件名并动态地提供它们(通过可能将更新的文件名写入配置文件或类似的东西),但老实说,我认为这会带来更多麻烦。
只是为遇到相同问题的任何人发布此回复。
我是 运行 Express 上的一个应用程序,我的浏览器一直在获取应该已经缓存的文件。违规文件的状态代码为 304,大小始终为 220 B / 221 B。其他资源(得到正确服务)显示“(来自缓存)”。
更多信息:ETags/文件内容没有改变,我设置了一些响应headers。
res.set('Cache-Control', 'max-age=345600');
res.set('Expires', new Date(Date.now() + 345600000).toUTCString());
(来源:imageno.com)
诚然,我不是 HTTP 专家,但也许有人可以帮助我理解为什么会发生这种情况?
本质上,浏览器正在缓存并提供缓存包(尽管它不显示“来自缓存”的消息)。为了服务它们,它向服务器发送请求并检查文件是否已更改。如果它没有改变,服务器发送一个 304 响应代码,浏览器从缓存中提取文件。这大约需要 15-50 毫秒,因此不会对性能产生重大影响。
但是,我可以强制浏览器显示文件而不发送验证请求(例如外部托管库)。这将需要为遥远的未来设置 expires/cache-control headers,time-stamping 静态资产的文件名并动态地提供它们(通过可能将更新的文件名写入配置文件或类似的东西),但老实说,我认为这会带来更多麻烦。
只是为遇到相同问题的任何人发布此回复。