首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails 4 http缓存返回200 iso 304,即使使用相同的ETag和last_modified

rails 4 http缓存返回200 iso 304,即使使用相同的ETag和last_modified
EN

Stack Overflow用户
提问于 2017-07-24 15:02:18
回答 1查看 952关注 0票数 1

我对缓存非常陌生,所以我尝试了一些不同的方式来缓存我的网站。我现在已经决定了HTTP缓存,因为它是最合适的,它有零星的更新和很多用户反复浏览相同的页面。

不过,我很难让它起作用。该站点根据您是否登录显示不同的内容,因此我必须根据current_user和模型集合的最新更新来使缓存失效。

如果我查看铬,检查ETag和modified_since是相同的,但是服务器返回的是200而不是304。我的代码在开发环境中工作,所以我不知道如何排除它。另外,只有基于模型集合(类似于最新更新)的不同页面才能正常工作。

来自控制器的代码:

代码语言:javascript
复制
def index
  ...#some code

  # HTTTP caching:
  last_mod = @scraps.order("updated_at").last.updated_at
  user = current_user ? current_user.id : 0

  fresh_when etag: user.to_s, last_modified: last_mod, public: false
end

铬检测输出

响应头:

代码语言:javascript
复制
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Last-Modified: Sun, 23 Jul 2017 20:40:53 GMT
Cache-Control: max-age=0, private, must-revalidate
ETag: W/"6e92592bdb6c3cf610020e2b076e64b4"
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Runtime: 3.187090
X-Request-Id: c698c0c6-8a0d-44ba-8ca9-3f162b766478
Date: Mon, 24 Jul 2017 14:49:38 GMT
Set-Cookie: ... [edited out]; path=/; HttpOnly
X-Powered-By: Phusion Passenger 5.0.30
Server: nginx/1.10.1 + Phusion Passenger 5.0.30
Content-Encoding: gzip

请求头:

代码语言:javascript
复制
GET /scraps?page=3&price_max=100&price_min=0&producer=silk+scraps HTTP/1.1
Host: www.picture-scraps.com
Connection: keep-alive
Accept: text/html, application/xhtml+xml, application/xml
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
X-XHR-Referer: https://www.picture-scraps.com/scraps?page=4&price_max=100&price_min=0&producer=silk+scraps
Referer: https://www.picture-scraps.com/scraps?page=4&price_max=100&price_min=0&producer=silk+scraps
Accept-Encoding: gzip, deflate, br
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4,af;q=0.2
Cookie: ... [edited out]
If-None-Match: W/"6e92592bdb6c3cf610020e2b076e64b4"
If-Modified-Since: Sun, 23 Jul 2017 20:40:53 GMT

我可以想象一些额外的信息是需要的,所以请请求,我将补充这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 09:44:53

今天就算出来了。这个职位提供了答案。我看到服务器使用了弱etags,而在dev环境中使用了强etags。后者是预期的,因为弱的etags仅仅是从rails 5向前引入的。

如果在rails 4中使用Nginx,您可能会遇到同样的问题。安装埃塔格宝石帮我解决了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45283946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档