我不明白文档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
我不知道发生了什么......
答案 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