代码之家  ›  专栏  ›  技术社区  ›  John Topley

铁轨陈旧?站点地图的方法始终返回HTTP 200

  •  5
  • John Topley  · 技术社区  · 17 年前

    我的Ruby on Rails应用程序使用以下控制器代码生成sitemap.xml文件:

    class SitemapController < ApplicationController
      layout nil
    
      def index
        headers['Content-Type'] = 'application/xml'
        last_post = Post.last
        if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
          respond_to do |format|
            format.xml { @posts = Post.sitemap } # sitemap is a named scope
          end
        end
      end
    end
    

    我的理解是 stale? 方法应确保在内容未更改的情况下HTTP 304未修改响应。但是,每当我使用curl或Web浏览器测试时,总会得到一个HTTP 200:

    $ curl --head localhost:3000/sitemap.xml
    HTTP/1.1 200 OK
    Connection: close
    Date: Mon, 13 Apr 2009 15:50:00 GMT
    Last-Modified: Wed, 08 Apr 2009 16:52:07 GMT
    X-Runtime: 100
    ETag: "5ff2ed60ddcdecf291e7191e1ad540f6"
    Cache-Control: private, max-age=0, must-revalidate
    Content-Type: application/xml; charset=utf-8
    Content-Length: 29318
    

    我在使用吗? 陈旧的? 方法正确吗?是否可以在本地测试?

    1 回复  |  直到 17 年前
        1
  •  4
  •   Adam Alexander    17 年前

    很可能您的Rails代码很好,但是当您执行测试时,curl不会发送if-modified-since头。从 curl docs :

    时间条件

    HTTP允许客户端指定时间 文件的条件IT 请求。如果修改自或 如果没有修改。卷发可以让你 用-z/--time cond指定它们 旗帜。

    例如,您可以轻松地 下载只有在 远程文件比本地文件更新 复制。其制作方式如下:

    curl-z本地.html http://remote.server.com/remote.html

    或者,只有在 本地文件比远程文件更新 一个。提前预约日期 带“-”的字符串,如中所示:

    curl-z-local.html文件 http://remote.server.com/remote.html(远程)

    您可以将“自由文本”日期指定为 条件。告诉curl只下载 文件(如果从以下时间起更新) 昨天:

    curl-z昨天 http://remote.server.com/remote.html(远程)

    然后卷曲将接受广泛的 日期格式。你总是安排约会 从另一个方向检查 在它前面加一个破折号“-”。

    推荐文章