对于存储在数据存储区中的图像发送“304 Not Modified”时,可以设置“Cache-Control:public”

时间:2010-05-02 19:18:05

标签: python http google-app-engine caching

在询问有关sending “304 Not Modified” for images stored in the in the Google App Engine datastore的问题后,我现在对Cache-Control提出疑问。

我的应用现在发送Last-ModifiedEtag,但默认情况下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背后原因的行为)

  

这个指令坚持认为   浏览器必须重新验证页面   在服务之前对服务器   来自缓存。请注意它隐含   让浏览器缓存页面。

3 个答案:

答案 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使用的代理)缓存您的映像。如果图像是机密或用户特定的,您不希望发生这种情况。在所有其他情况下,缓存正是您想要的。

相关问题