3

ステータス画像を表示するための Sinatra ルートがあります。この単純な解決策は機能しますが、キャッシュの問題に遭遇します。

get '/stream/:service/:stream_id.png' do
  # Building image_url omitted

  redirect image_url
end

ここでキャッシュを処理し、最大 TTL を設定する適切な方法は何ですか? これらの画像は他のサイトに埋め込まれますが、それ以外の場合は、リダイレクト先の画像に直接リンクできます。

site.com/image.png問題は、別の場所にリダイレクトするような URL を生成することですがsite.com/image.png、それはブラウザによってキャッシュされていると見なされるため、更新されているかどうかを確認しません。

私は Cache-Control ヘッダーを少し試しましたが、まだ解決策を見つけていません。

この方法が完全に骨の折れる場合、私は他の解決策を受け入れます。

4

2 に答える 2

2

ルートごとに Cache-Control を設定します。

get '/stream/:service/:stream_id.png' do
  # Building image_url omitted
  response['Cache-Control'] = "public, max-age=0, must-revalidate"
  redirect image_url
end
于 2013-03-13T21:32:11.010 に答える
0

Sinatra のexpires方法を利用することもできます。

# Set the Expires header and Cache-Control/max-age directive. Amount
# can be an integer number of seconds in the future or a Time object
# indicating when the response should be considered "stale". The remaining
# "values" arguments are passed to the #cache_control helper:
#
#   expires 500, :public, :must_revalidate
#   => Cache-Control: public, must-revalidate, max-age=60
#   => Expires: Mon, 08 Jun 2009 08:50:17 GMT

またはcache_control方法:

# Specify response freshness policy for HTTP caches (Cache-Control header).
# Any number of non-value directives (:public, :private, :no_cache,
# :no_store, :must_revalidate, :proxy_revalidate) may be passed along with
# a Hash of value directives (:max_age, :min_stale, :s_max_age).
#
#   cache_control :public, :must_revalidate, :max_age => 60
#   => Cache-Control: public, must-revalidate, max-age=60
#
# See RFC 2616 / 14.9 for more on standard cache control directives:
# http://tools.ietf.org/html/rfc2616#section-14.9.1

Sinatra ドキュメンテーション (1.4.6 リリース時点)

于 2015-07-09T00:53:33.520 に答える