带有unicon和memcached的Sinatra应用程序应该返回304个缓存命中代码



我使用Sinatra框架在Heroku上安装了ruby应用程序。web服务器是独角兽,当请求(通过Dalli gem)在memcached的缓存中找到其内容时,它会说cache: [GET /] fresh,所以它显然是在从缓存中检索内容。但是,当我检查标头时,响应代码始终是200,而不是304。我的印象是,当一个页面是从缓存中提供的,因为它仍然是新的,响应代码应该是304。

这是按预期工作吗?我误解了什么?当独角兽在缓存中发现东西时,它不会给出304个代码吗?我应该不担心这种事吗?

欢迎提供任何指导。

Unicorn无法知道应用程序如何处理缓存。因此,它无法为您设置电子标签。

正如Rajesh所说,304是关于浏览器缓存的。您必须在应用程序中生成Etag哈希,然后将其发送到浏览器(通过标头)。

根据这篇文章,浏览器支持etags:浏览器支持etags etags。

以下是304的官方文档:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

编辑:看看这里用sinatra:实现它

http://www.sinatrarb.com/intro#Cache%20Control

http://opensoul.org/blog/archives/2011/01/29/etags-with-memcached/

如果客户端执行了条件GET请求并允许访问,但文档未被修改,则服务器应使用此状态代码进行响应。

所以,独角兽可能没有做它应该做的事情(而且,从语义上讲,响应代码200有点道理)。

最新更新