在询问有关sending “304 Not Modified” for images stored in the in the Google App Engine datastore的问题后,我现在对Cache-Control
提出疑问。
我的应用现在发送Last-Modified
和Etag
,但默认情况下GAE发送Cache-Control: no-cache
。根据{{3}}:
根据“无缓存”指令 RFC,告诉浏览器它 应该重新验证服务器 在从页面提供服务之前 缓存。 [...]在实践中,IE和 Firefox已经开始对待 no-cache指令,就像它指示一样 浏览器甚至不缓存 页。
由于我希望浏览器缓存图像,我在代码中添加了以下行:
self.response.headers['Cache-Control'] = "public"
根据与之前相同的页面:
“cache-control:public”指令 [...]告诉浏览器和代理 [...]页面可能被缓存。 这对非敏感页面很有用, 因为缓存提高了性能。
问题是这是否会以某种方式对应用程序造成伤害?是否最好发送Cache-Control: must-revalidate
以“强制”浏览器重新验证(我认为这是最初发送Cache-Control: no-cache
背后原因的行为)
这个指令坚持认为 浏览器必须重新验证页面 在服务之前对服务器 来自缓存。请注意它隐含 让浏览器缓存页面。
答案 0 :(得分:1)
除非您的内容受HTTP身份验证或SSL保护,否则无需设置Cache-Control: public
。
尝试设置Cache-Control: max-age=nn
(其中nn是您希望缓存的整数秒,以考虑新鲜的响应)。 AppEngine 应该删除no-cache。
答案 1 :(得分:1)
参见http://www.kyle-jensen.com/proxy-caching-on-google-appengine,给出了为GAE设置缓存控制头的一个很好的解释。
答案 2 :(得分:0)
这对您的应用程序无害,该页面中描述的唯一风险相当于公共代理(例如ISP使用的代理)缓存您的映像。如果图像是机密或用户特定的,您不希望发生这种情况。在所有其他情况下,缓存正是您想要的。