node.js - 关于nginx的ETag的一些问题
迷茫
迷茫 2017-04-17 15:58:54
0
2
554

关于nginx的Etag问题,nginx默认是有Etag的,但是问题就在于:无论你对源代码做了什么改动,比如说改动了注释,改动了空行什么的,ETag都会变。
(但实际上,比如我改动了注释,但是这个注释可能对程序员很重要,对用户来讲是无所谓的,因此ETag是没有必要变化的)

而http权威指南中说Etag解决了这个问题:

有些文档可能被修改了,但所做修改并不重要,不需要让世界范围内的缓存都重装数据(比如对拼写或注释的修改)。

而nginx默认也加了前缀“W/”来标识弱验证器

那这样的话ETag显然没有解决这个问题。

由于笔者对nginx停留在仅供使用的阶段,并没有源码查看和插件编写的经历,所以想问:

nginx有没有办法配置或者现成的插件或者自定义增加一些内容,从而让ETag并不是任意更改都变化,有一定的变通性?或者说 nginx有没有办法自定义ETag的生成规则?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(2)
Peter_Zhu

これを nginx で制御しないのが最善です。自動ビルド中に制御できます。たとえば、webpack はパッケージ化時にすべてのコメントを削除します。さらに、ETag を介してキャッシュをネゴシエートせず、Webpack を介してハッシュを設定してキャッシュを強制します。

追加: Etag を使用しない理由

  1. あなたがリストした状況

  2. ネゴシエーション キャッシュには 304 が必要ですが、引き続きリクエストを送信する必要があります

  3. 負荷分散中、異なる物理マシン上の同じファイルの異なる i ノードは異なる ETag を生成します (テストされていません)

参考: 構成エラーによって生じるギャップ: 200 OK (FROM CACHE) と 304 NOT MODIFIED

いいねを押す +0
小葫芦

正しいアプローチは、ファイルが変更されたかどうかを確認するために etag に依存しないことです。
静的ファイル キャッシュの問題に対処したい場合は、Web リンクに特別なリクエスト パラメータを追加して、ブラウザがリンクが変更されたと認識してファイルの最新バージョンを再リクエストするようにする必要があります

etag を変更せずにアノテーションを変更したい場合は、フロントエンド自動化プロセスを構成し、運用環境で実行されているコードを開発コードから分離し、ワンクリックでアノテーション付きコードを圧縮して難読化する必要があります。本番環境に公開します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!