带有unicorn和memcached的Sinatra应用程序应返回304代码用于缓存命中?

时间:2012-08-27 18:31:29

标签: ruby caching memcached sinatra unicorn

我使用Sinatra框架在Heroku上设置了我的ruby应用程序。 Web服务器是独角兽,当请求在memcached的缓存中找到它的内容时(通过Dalli gem),它会显示cache: [GET /] fresh,因此它清楚地从缓存中检索内容。但是,当我检查标题时,响应代码总是200而不是304.我的印象是,当一个页面从缓存中提供时,它仍然是新鲜的,响应代码应该是304.

这是否按预期工作,我误解了什么?当Unicorn在缓存中找到某些内容时,它是否只提供304代码?我不应该担心这种事吗?

感谢任何指导。

2 个答案:

答案 0 :(得分:2)

  

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

Source

所以,也许独角兽不会做它应该做的事情(从语义上讲,响应代码200有点意义)。

答案 1 :(得分:2)

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

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

根据这篇帖子,浏览器支持etags:Browser support for 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/