Rails' abgestanden? Verfahren zur Sitemap gibt immer HTTP 200
-
09-09-2019 - |
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?
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 '-'.