2013-02-01 2 views
13

開発中は、となり、HTTP 304の応答(200の方が好ましい)を防止し、Connect/Express static middlewareにファイルシステムのすべての応答を読み取らせます。キャッシングはまったく行いません。Connect/Express静的ミドルウェアでHTTP 304応答を完全に防止する方法は?

私は無駄に、0と1のmaxAge値で遊んで試してみました:

app.use(express.static(__dirname + '/public', { maxAge: 1 })) 

答えて

16

私は開発中にこれを行うことにより、200の応答を取得:

応じて「のETag」を防止
var express = require('express'); 
app = express(); 
app.use(function(req, res, next) { 
    req.headers['if-none-match'] = 'no-match-for-this'; 
    next();  
}); 
+0

プロダクション環境でこれを使用する場合の影響は何ですか?私は開発のためにそれを使用していますが、私はそれを削除すると私はユーザーが同じ問題を抱えてしまうのではないかと思います。 – Hawkee

+0

これは開発に最適です。私は、本番環境で動的な振る舞いが必要な場合は、別々のルートを作成してファイルを提供する必要があると私は信じています。実世界のプロジェクトでは、実際に静的なリソースを扱う作業と動的な負荷を許容する方法の両方が必要になります。 – Andrei

+0

ありがとうございます。これは私のために働いた。 – unicornherder

2

このソリューションは、単なる回避策です。ブラウザ側からこの問題をdisabling caching in Chromeで解決できます。これは、iOSのSafariのようなChrome以外のもので作業する必要がある場合には役に立ちません。

+0

を助けるかもしれない、私はこれが受け入れられた理由の回答を参照してくださいいけません他のサービスや第三者のソフトウェアでもかまいません。 –

6

応答ごとにファイルシステムから読み取ります。リクエストETAGがレスポンスETAGと一致する場合、レスポンスの本文は送信されません。同じハッシュのファイルです。これは304の応答がどのように機能するかです。

なぜ304の応答を防止したいですか?

+4

なぜExpressが304を返すのか、私は混乱しています。ありがとうございました! –

+3

weak etagsはJSファイルをキャッシュしているため、フロントエンドの開発者が苦労する可能性があります。 –

6
app.disable('etag'); 

サービスの消費者はブラウザだけではありませんよう

+1

4.0ブランチの静的ミドルウェアに影響しません... –

+0

どこに追加しますか? – SharpCoder

関連する問題