Railsの古いですか?サイトマップのための方法は、常にHTTP 200を返します

StackOverflow https://stackoverflow.com/questions/744353

  •  09-09-2019
  •  | 
  •  

質問

私のRuby on Railsのアプリケーションは、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

私の理解では、内容が変更されていない場合stale?メソッドはHTTP 304未Modified応答を確実にしなければならないということです。

:しかし、私はこの使用してカールやWebブラウザをテストするたびに、私は常に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

私は正しくstale?メソッドを使用していますか?ローカルでこれをテストすることも可能ですか?

役に立ちましたか?

解決

あなたのRailsのコードがうまくている可能性がありますが、あなたのテストを実行すると、カールは、If-Modifiedの-Sinceヘッダを送信していません。 カールドキュメントするます:

  

時間条件

     

HTTPクライアントは、時間を指定することができます   文書それのための条件   リクエスト。変更された場合は、-のでそれはありますか   もし非改変-以来。あなたができるようにするカール   時間-COND - -z /でそれらを指定します   フラグます。

     

たとえば、あなたは簡単に作ることができます   場合にのみ行われますダウンロード   リモートファイルはローカルより新しいです   コピー。

:それは次のように行われることになります      

カール-z local.html    http://remote.server.com/remote.htmlする

     

それとも、場合にのみ、ファイルをダウンロードすることができます   ローカルファイルには、リモートのより新しいです   1。日付を付加することでこれを行ってください   ' - ' の文字列のように、:

     

カール-z -local.html    http://remote.server.com/remote.htmlする

     

君は「フリーテキスト」の日付を指定することができます   調子。ダウンロードのみにカール知らせます   それは以降に更新された場合は、ファイル   昨日ます:

     

カール-z昨日    http://remote.server.com/remote.htmlする

     

カールは、その後の広い範囲を受け入れます   日付形式。あなたはいつも日付を作ります   によって他の方法で回避をチェック   ダッシュでそれを付加 ' - '。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top