Domanda

Il mio Ruby on Rails applicazione utilizza il seguente codice di controllo per generare un file 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

La mia comprensione è che il metodo stale? dovrebbe garantire un HTTP 304 risposta Not Modified se il contenuto non è cambiato. Tuttavia, ogni volta che provo questa utilizzando curl o un browser Web ottengo sempre un 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

Sto usando il metodo stale? correttamente? E 'anche possibile testare questo locale?

È stato utile?

Soluzione

è probabile che il codice Rails è bene, ma ricciolo non sta inviando il If-Modified-Since quando si esegue il test. Dal ricciolo docs :

  

CONDIZIONI TEMPO

     

HTTP consente a un client di specificare un tempo   condizioni per il documento che   richieste. E 'If-Modified-Since o   Se-non modificato-Since. Arricciatura permetterà di   specificarli con l'-z / - time-cond   bandiera.

     

Ad esempio, si può facilmente fare un   download che viene eseguito se solo   il file remoto è più recente di un locale   copia. Si sarebbe reso come:

     

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

     

In alternativa, è possibile scaricare un file solo se il   file locale è più recente il telecomando   uno. A tale scopo, anteponendo la data   stringa con un '-', come in:

     

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

     

È possibile specificare una data "testo libero", come   condizione. Dillo curl per scaricare solo   il file se è stato aggiornato dal   ieri:

     

ricciolo -z ieri    http://remote.server.com/remote.html

     

Curl sarà quindi accettare una vasta gamma di   formati di data. Fai sempre la data   verifica il contrario per   anteponendo con un trattino '-'.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top