<p>在问了一个关于<a href="https://stackoverflow.com/questions/2750889/send-a-304-not-modified-for-images-stored-in-the-datastore">sending “304 Not Modified” for images stored in the in the Google App Engine datastore</a>的问题后,我现在有一个关于<code>Cache-Control</code>的问题。在</p>
<p>我的应用程序现在发送<code>Last-Modified</code>和<code>Etag</code>,但默认情况下GAE也发送<code>Cache-Control: no-cache</code>。根据<a href="http://palisade.plynt.com/issues/2008Jul/cache-control-attributes/" rel="nofollow noreferrer">this page</a>:</p>
<blockquote>
<p>The “no-cache” directive, according to
the RFC, tells the browser that it
should revalidate with the server
before serving the page from the
cache. [...] In practice, IE and
Firefox have started treating the
no-cache directive as if it instructs
the browser not to even cache the
page.</p>
</blockquote>
<p>由于我确实希望浏览器缓存图像,我在代码中添加了以下行:</p>
<pre><code>self.response.headers['Cache-Control'] = "public"
</code></pre>
<p>根据同一页:</p>
<blockquote>
<p>The “cache-control: public” directive
[...] tells the browser and proxies
[...] that the page may be cached.
This is good for non-sensitive pages,
as caching improves performance.</p>
</blockquote>
<p>问题是这是否会在某种程度上对应用程序有害?最好发送<code>Cache-Control: must-revalidate</code>来“强制”浏览器重新验证(我想这就是发送<code>Cache-Control: no-cache</code>背后的原因)</p>
<blockquote>
<p>This directive insists that the
browser must revalidate the page
against the server before serving it
from cache. Note that it implicitly
lets the browser cache the page.</p>
</blockquote>