obsoleto Rails? método para sitemap sempre retorna HTTP 200
-
09-09-2019 - |
Pergunta
O meu Ruby on Rails aplicativo usa o seguinte código do controlador para gerar um arquivo 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
O meu entendimento é que o método stale?
deve assegurar um HTTP 304 resposta não modificado se o conteúdo não mudou. No entanto, sempre que eu testar isso usando curl ou um navegador web eu sempre obter um 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 usando o método stale?
corretamente? Será que é mesmo possível testar isso localmente?
Solução
é provável que o seu código Rails é apenas bom, mas onda não está enviando o If-Modified-Since quando você executar seu teste. Do onda docs :
CONDIÇÕES DE TEMPO
HTTP permite que um cliente para especificar uma hora condição para o que documento solicitações de. É If-Modified-Since ou Se-Unmodified-Since. Onda permitem que você especificá-los com o -z / - time-cond bandeira.
Por exemplo, você pode facilmente fazer uma download que só é realizada se o arquivo remoto é mais recente do que um local, cópia de. Ele seria feita como:
onda -z local.html http://remote.server.com/remote.html
Ou você pode baixar um arquivo somente se o arquivo local é mais recente do que a remota 1. Faça isso, antecedendo a data string com um '-', como em:
onda -z -local.html http://remote.server.com/remote.html
Você pode especificar uma data "texto livre", como doença. onda Diga aos única de download o arquivo se ele foi atualizado desde ontem:
onda -z ontem http://remote.server.com/remote.html
Onda, então, aceitar uma ampla gama de formatos de data. Você sempre fazer a data verifique o contrário por antecedendo-lo com um traço '-'.