【问题标题】:rails cloudfront cache expirationRails 云端缓存过期
【发布时间】:2017-02-21 21:55:36
【问题描述】:

我现在正在使用 cloudfront + S3,图像正在按预期提供,但 cloudfront 缓存命中/未命中看起来有错误。

重现步骤

  1. 访问网页(网络标签显示x-cache:Hit from cloudfront
  2. curl -I $same-url(X-Cache: Miss from cloudfront)
  3. curl -I $same-url(X-Cache: Hit from cloudfront)

我希望第一个 curl 显示云端点击,因为浏览器之前显示了云端点击。

【问题讨论】:

    标签: ruby-on-rails amazon-cloudfront


    【解决方案1】:

    这很可能是因为 Cloudfront 缓存了请求中的 Cookie 信息或其他标头(如 User-agentContent-Type 等)。

    1. 检查您是否在分发设置中将 cookie 数据转发到您的来源。如果您这样做,Cloudfront 将为每个新会话缓存不同的版本(如果您有 rails-session cookie)。
    2. 检查有关 Cloudfront 如何处理请求中的标头的设置。例如。默认情况下,Cloudfront 将标头 Content-type 传递给源服务器。标题和默认行为的完整列表位于此处http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-headers-behavior

    要查看您发出的请求中的标头:

    检查开发者工具中的网络标签。在那里你可以看到请求头。

    卷曲

    -v 选项添加到请求中

    curl -v -I http://yoursite.com
    

    它会输出类似

    的东西
    > HEAD / HTTP/1.1
    > User-Agent: curl/7.35.0
    > Host: yoursite.com
    > Accept: */*
    

    然后,您可以尝试在 curl-request 中添加/删除不同的标头,以模仿浏览器发出的请求。例如。添加相同的 cookie 数据:

    curl -v -I -H "Cookie: my_cookie=some_value;" http://yoursite.com
    

    您的场景中最有可能的罪魁祸首是 Content-type 标头,默认情况下 curl-requests 中不存在该标头。

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2016-02-28
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多