Frage

Meine Ruby on Rails-Anwendung verwendet den folgenden Controller-Code eine sitemap.xml-Datei zu erzeugen:

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

Mein Verständnis ist, dass die stale? Methode eine HTTP 304 nicht geändert Antwort sollte sicherstellen, wenn der Inhalt nicht verändert hat. Jedes Mal, wenn ich dies mit curl oder einen Web-Browser zu testen bekomme ich immer eine 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

Bin ich mit der stale? Methode richtig? Ist es sogar möglich, diese vor Ort zu testen?

War es hilfreich?

Lösung

Es ist wahrscheinlich, dass Ihr Rails-Code nur in Ordnung ist, aber Locke ist den If-Modified-Since Header nicht zu senden, wenn Sie Ihren Test durchführen. Von der curl docs :

  

ZEIT BEDINGUNGEN

     

HTTP ermöglicht es einem Client, eine Zeit zu spezifizieren   Voraussetzung für das Dokument, um es   Anfragen. Es ist If-Modified-Since oder   If-Unveränderte-Since. Curl können Sie   geben Sie diese mit der -z / - zeit cond   Flagge.

     

Zum Beispiel, können Sie leicht eine machen   Download, wenn nur dann durchgeführt wird   die Remote-Datei neuer ist als ein lokales   Kopieren. Es wäre gemacht wie:

     

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

     

Sie können auch eine Datei herunterladen, nur dann, wenn die   lokale Datei neuer ist als die Fern   einer. Tun Sie dies durch das Voranstellen des Datums   String mit einem '-', wie in:

     

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

     

Sie können einen „freien Text“ Datum angeben, wie   Bedingung. Sagen Sie curl nur herunterladen   die Datei, wenn sie aktualisiert wurde seit   Gestern:

     

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

     

Locke wird dann akzeptiert eine breite Palette von   Datumsformate. Sie machen immer das Datum   Besuche die umgekehrt durch   Voranstellen es mit einem Bindestrich '-'.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top