陈旧?在rails中的方法。它做了什么?

时间:2016-03-11 23:11:32

标签: ruby-on-rails

我不明白文档here

令我感到困惑的是这个:为什么你在回复中设置etag或last_modified?客户端是不是发送etag和if-modified-since标头的客户端?一旦服务器(或代理服务器)收到这些客户端头,服务器是否检查资源的etag和修改日期是否匹配?文档表明请求是从头开始生成的而不是数据?另外,为什么我们在响应中设置etag和last_modified?不是由客户设定的吗?

  

stale?(options)protected设置etag和/或last_modified   响应并根据客户端请求进行检查。如果请求   与提供的选项不匹配,请求被认为是陈旧的   并且应该从头开始生成。否则,它是新鲜的,我们   不需要生成任何内容,并且“304 Not Modified”的回复是   发送。

     

参数:

     

:etag:last_modified:public默认情况下,Cache-Control标头是   如果您希望应用程序可以缓存,请将此属性设置为true   通过其他设备(代理缓存)。

它到底是什么?因此,一些客户端请求带有etag(一些哈希),我们检查该请求是否等于我们使用陈旧设置的控制器中的选项?这是我的控制器:

format.json_v20150501 do
          expires_in 30.minutes, public: true
          if stale?(last_modified: last_modified_for_models(recipes), etag: etag_for_models(recipes))
            render json: recipes,
              compact: true,
              serializer: PaginationSerializer,
              each_serializer: Api::V20150315::RecipeSerializer
          end
        end

我不知道发生了什么......

1 个答案:

答案 0 :(得分:4)

陈旧?检查提供的选项(那些args)以确定对象是否已被修改,因此需要重新生成(在缓存的情况下)。

关于etags,阅读本文可能会有所帮助:http://blog.bigbinary.com/2016/03/08/rails-5-switches-from-strong-etags-to-weak-tags.html?utm_source=rubyweekly&utm_medium=email