Expressjsは自動的にetagを送信します。 etagの生成方法を知りたいのですが、getルーチンによって動的に生成されるコンテンツに基づいています。または、コンテンツ(DBからの動的コンテンツ)を生成し、同じようにetagを返すプロセスさえ経ることなく、それを維持する方法がありますか?.
有効なセッションIDであるかどうかを確認するだけで始まり、クライアントが提供するのと同じetagを返すミドルウェアであるか、URL +セッションIDに基づいている場合があります。そして、db呼び出し全体とそれらすべてのものを通過するのではなく、そこで要求を終了します。この場合、クライアントが304呼び出しを行っていることを知る必要があります。
Expiresタグを使用できますが、セッションが終了したら。誰かがURLを開いている場合、許可されません。そのため、etagもセッションIDに基づいている必要があると考えています。この動的コンテンツシナリオでは、変更された場合にどのように機能しますか。使用できますか。
執筆時点(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')
(または同様の関数)を呼び出す前のres.send()
さらなる議論(長所と短所を含む)はここにあります: https://github.com/visionmedia/express/issues/2129#issue-34053148