40

etagNode.js Express アプリケーションのすべての HTTP 応答からヘッダーを削除する必要があります。if-none-matchExpress で記述された Web サービス API があり、etag を送信してクライアントがヘッダーを送り返すと、予期しない結果がクライアントに表示されます。

app.disable('etag')とを試しましres.removeHeader('etag')たが、どちらも機能しません。アプリは関係なくヘッダーを送信します。

すべての応答でこのヘッダーを無効にする他の方法はありますか?

4

6 に答える 6

63

app.disable('etag')これに対処するためにマージされたプルリクエストがありました:

https://github.com/visionmedia/express/commit/610e172fcf9306bd5812bb2bae8904c23e0e8043

更新: Bigood がコメントで指摘したように、新しいやり方は次のとおりです。

app.set('etag', false); // turn off

バージョン 3.9.0 で変更が発生しました: https://github.com/strongloop/express/releases/tag/3.9.0

etag の設定に関するその他のオプションについては、こちらの 4.x ドキュメントを確認してください: http://expressjs.com/4x/api.html#app.set

于 2013-11-12T06:56:50.437 に答える
3

エクスプレスresponse.jsを見ると、リクエストメソッドがGETのときだけEtagが送られています。response.send() を呼び出す前に request.method を別のものに設定することで、express が応答で etag を送信するのを防ぐことができます。

例えば:

app.get('/path/returnsJSON', function(req, res){
/* HACK to workaround the framework sending e-tags and "304 NOT MODIFIED" responses */
req.method="NONE"; // was "GET"
res.status(200).send({data:1}); 
});

これは私にとってはうまくいきました。

于 2013-11-13T06:44:45.903 に答える
2

あなたの問題の本当の解決策は、etag が原因で奇妙な動作をしている理由を突き止めることだと私には思えます。

ただし、質問に答えると、Express は現在、etags ヘッダーの無効化をサポートしていません。実際には、このプル リクエストで議論およびマージされましたが、後で元に戻されました。これが本当に必要で、根本的な問題を修正したくない場合は、いつでもそのパッチを適用して、そこから先に進むことができます。

于 2013-03-03T22:51:43.523 に答える