将“Cache-Control: public”设置为在数据存储中保存的图像发送“304 Not Modified”是否可以?

9
在询问发送存储在Google App Engine数据存储中的图像时发送“304未修改”的问题后,现在我有一个关于 Cache-Control 的问题。 我的应用程序现在发送 Last-Modified 和 Etag ,但默认情况下GAE也会发送 Cache-Control:no-cache 。 根据this page

根据RFC, “无缓存”指令告诉浏览器它应该在从缓存中提供页面之前重新验证服务器。[...]实际上,IE和Firefox已经开始将no-cache指令视为指示浏览器甚至不缓存页面。

因为我确实想要浏览器缓存图像,所以我已将以下行添加到我的代码中:
self.response.headers['Cache-Control'] = "public"

根据之前的同一页面:
“cache-control:public”指示告诉浏览器和代理可以缓存该页面。对于非敏感页面,这有利于提高性能。
问题是这样做是否会对应用程序造成伤害?最好发送“Cache-Control:must-revalidate”以"强制"浏览器重新验证(我想这就是最初发送“Cache-Control:no-cache”的原因所在)。
此指令要求浏览器在从缓存中提供页面之前必须针对服务器重新验证页面。请注意,它隐含地允许浏览器缓存页面。
3个回答

1

除非您的内容受到HTTP身份验证或SSL保护,否则不需要设置Cache-Control: public

尝试设置Cache-Control: max-age=nn(其中nn是您希望缓存将响应视为新鲜的整数秒数)。AppEngine应该会删除no-cache。


1

0

这不会对您的应用程序造成任何伤害,该页面描述的唯一风险是公共代理(例如ISP使用的代理)缓存您的图像。如果图像是机密或特定于用户,则不希望发生这种情况。在所有其他情况下,缓存正是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接