Rails' out of date? sitemap method always returns HTTP 200

My Ruby on Rails application uses the following controller code to create a sitemap.xml file:

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

I understand that the method stale?should guarantee an HTTP 304 Not Modified response if the content has not changed. However, whenever I test this using curl or a web browser, I always get 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

Am I using the method stale?correctly? Is it even possible to check this locally?

+5
1

, Rails , curl If-Modified-Since . curl docs:

HTTP . If-Modified-Since -Unmodified-. Curl -z/- time-cond .

, , , , . :

curl -z local.html http://remote.server.com/remote.html

, , . , string '-', :

curl -z -local.html http://remote.server.com/remote.html

" " . , , :

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

Curl . '-'.

+4

All Articles