我正在编写一种资源处理方法,我可以控制对各种文件的访问,我希望能够使用浏览器的缓存.我的问题是双重的:
哪些是确定的HTTP标头,我需要检查以确定是否应该发送304响应,以及当我检查它时我在寻找什么?
另外,当我最初发送文件(如'Last-Modified')作为200响应时,是否需要发送任何标头?
一些伪代码可能是最有用的答案.
缓存控制头怎么样?可能的各种可能值会影响您发送给客户端的内容(即max-age),还是应该只有在被修改后才能遵守?
在询问有关为存储在Google App Engine数据存储区中的图像发送"304 Not Modified"的问题后,我现在有一个问题Cache-Control.
我的应用程序现在将Last-Modified和Etag,但默认情况下GAE alsto发送Cache-Control: no-cache.根据这个页面:
根据RFC,"no-cache"指令告诉浏览器它应该在从缓存提供页面之前重新验证服务器.[...]实际上,IE和Firefox已经开始处理no-cache指令,就像它指示浏览器甚至不缓存页面一样.
因为我希望浏览器缓存图像,所以我在代码中添加了以下行:
self.response.headers['Cache-Control'] = "public"
Run Code Online (Sandbox Code Playgroud)
根据以前的同一页面:
"cache-control:public"指令[...]告诉浏览器和代理[...]页面可以被缓存.这对非敏感页面很有用,因为缓存可以提高性能.
问题是,这是否会以某种方式对应用程序有害?是否最好发送Cache-Control: must-revalidate"强制"浏览器重新验证(我认为这是最初发送的原因Cache-Control: no-cache)
该指令坚持要求浏览器在从缓存提供服务器之前必须重新验证页面.请注意,它隐式地让浏览器缓存页面.