62

Expressjs は自動的に etag を送信します。etag がどのように生成されるかを知りたいのですが、get ルーチンによって動的に生成されるコンテンツに基づいているのでしょうか。または、コンテンツ(動的コンテンツ-DBから)を生成するプロセスを経ずに、同じようにetagを返すことによって、それを操作できる方法はありますか?

有効なセッションIDであるかどうかをチェックするだけで始まり、クライアントが提供するのと同じetagを返すミドルウェアであるか、URL +セッションIDに基づいている可能性があります。そのようにして一意になります。db呼び出し全体とそれらすべてのものを通過するのではなく、そこでリクエストを終了します。その場合、クライアントが 304 コールを発信していることを知る必要があります。

期限切れタグを使用できますが、セッションが終了したとき。誰かがその URL を開いた場合、それは許可されるべきではありません。そのため、etag もセッション ID に基づいている必要があると考えています。この動的コンテンツのシナリオでは、変更された場合はどのように機能しますか。使用できますか。

4

2 に答える 2

57

執筆時点 (2014 年 7 月 8 日) では、脆弱な ETag はCRC32 ( source ) を使用して生成され、強力な ETag は MD5 ( source ) を使用して生成されます。

Express への貢献者の 1 人の発言に基づいて、強力な ETag と弱い ETag のどちらを使用するかを次のように指定できます。

app.enable('etag') // use strong etags
app.set('etag', 'strong') // same
app.set('etag', 'weak') // weak etags

次のように ETag を実行する独自のカスタム関数を指定することもできるようです。

app.set('etag', function(body, encoding){ /* return valid etag */ });

NPM パッケージfreshも一見の価値があります。Express で鮮度チェック ( source1 、 source2 ) に使用されているからです

アプリケーションに関しては、 (または同様の関数を)res.set('etag', 'my-awesome-etag-value')呼び出す前などに、任意の応答ヘッダーをオーバーライドできることを覚えておいてください。詳細な議論 (長所と短所を含む) は、 httpsres.send() ://github.com/visionmedia/express/issues/2129#issue-34053148 で見つけることができます。

于 2014-07-08T08:54:15.707 に答える