3

Sinatra フレームワークを使用して、Heroku で Ruby アプリをセットアップしています。Web サーバーはユニコーンであり、リクエストが (Dalli gem を介して) memcached のキャッシュでコンテンツを見つけると、キャッシュcache: [GET /] freshからコンテンツを取得していることを明確に示します。ただし、ヘッダーを確認すると、応答コードは常に 304 ではなく 200 です。キャッシュからページが提供されたときはまだ新しいので、応答コードは 304 である必要があるという印象を受けました。

これは意図したとおりに機能していますか?何か誤解していますか? Unicorn は、キャッシュで何かを見つけたときに 304 コードを返さないのでしょうか? こういうの気にしなくていいの?

任意のガイダンスをいただければ幸いです。

4

2 に答える 2

2

Unicorn は、アプリケーションがキャッシュを処理する方法を認識できません。したがって、etag を設定することはできません。

Rajesh が言ったように、304 はブラウザのキャッシュに関するものです。アプリで Etag ハッシュを生成し、それを (ヘッダー経由で) ブラウザーに送信する必要があります。

この投稿によると、ブラウザーは etags をサポートしています: eTags etags のブラウザーサポート。

304 の公式ドキュメントは次のとおりです

編集:ここを見て、sinatraで実装してください:

http://www.sinatrarb.com/intro#Cache%20Control

http://opensoul.org/blog/archives/2011/01/29/etags-with-memcached/

于 2012-12-13T14:47:17.430 に答える
2

クライアントが条件付き GET リクエストを実行し、アクセスが許可されているが、ドキュメントが変更されていない場合、サーバーはこのステータス コードで応答する必要があります。

ソース

したがって、ユニコーンは本来すべきことを行っていない可能性があります (そして、意味的には、応答コード 200 は意味のあるものです)。

于 2012-12-13T10:59:58.277 に答える