Pregunta

Mi Ruby on Rails aplicación utiliza el siguiente código de controlador para generar un archivo 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

Mi entendimiento es que el método stale? debe garantizar una respuesta HTTP 304 No modificado si el contenido no ha cambiado. Sin embargo, cada vez que probar esto usando rizo o un navegador web Siempre tengo 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

¿Estoy usando el método stale? correctamente? ¿Es posible poner a prueba esta a nivel local?

¿Fue útil?

Solución

lo más probable es que su código de Rails es muy bien, pero rizo no está enviando el Si-Modified-Since encabezado cuando se realiza la prueba. Desde el rizo docs :

  

Las condiciones de tiempo

     

HTTP permite a un cliente especificar una hora   condición para que el documento se   peticiones. Es If-Modified-Since o   Si-no modificado-Puesto. Curl permitirá   especificarlos con el -z / - Tiempo-cond   bandera.

     

Por ejemplo, se puede hacer fácilmente una   descarga que sólo se pone a cabo si   el archivo remoto es más reciente que un local de   Copiar. Se haría como:

     

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

     

O se puede descargar un archivo sólo si el   archivo local es más reciente que el control remoto   uno. Para ello, anteponiendo la fecha   cadena con un '-', como en:

     

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

     

Puede especificar un "texto libre" como fecha   condición. Dile a curl para descargar solamente   el archivo si se actualiza desde   Ayer:

     

-z rizo ayer    http://remote.server.com/remote.html

     

Curl entonces aceptar una amplia gama de   formatos de fecha. Siempre haces la fecha   comprobar el revés por   anteponiendo con un guión '-'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top