3

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

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

任何指导表示赞赏。

4

2 回答 2

2

如果客户端已经执行了一个条件 GET 请求并且允许访问,但是文档没有被修改,服务器应该用这个状态码来响应。

来源

所以,unicorn 可能没有做它应该做的事情(并且,从语义上讲,响应代码 200 是有道理的)。

于 2012-12-13T10:59:58.277 回答
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/

于 2012-12-13T14:47:17.430 回答