HTTP圧縮とは 場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、大量のネットワーク帯域幅と時間が消費されることがあります。帯域幅を節約し、メッセージの応答速度を高速化するために、送信するメッセージ データを送信前に圧縮することができます。 HTTP は複数のメッセージ圧縮アルゴリズムをサポートしています。以下は一般的なリクエスト ヘッダーです。Accept-Encoding フィールドから、gzip、deflate、br の圧縮アルゴリズムをサポートしていることがわかります。この記事では、Gzip アルゴリズムを使用してメッセージを圧縮することに焦点を当てます。たとえば、Gzip を使用して HTML、Javascript、CSS ファイルを圧縮します。圧縮すると、ネットワーク経由で送信されるデータの量が大幅に削減され、ユーザーが Web ページを表示する速度が向上します。 受け入れる: text/html、application/xhtml+xml、application/xml;q=0.9、image/webp、image/apng、*/*;q=0.8 受け入れエンコーディング: gzip、deflate、br 受け入れ言語: zh-CN,zh;q=0.9 キャッシュ制御: max-age=0 接続: キープアライブ ホスト: localhost:8000 変更日時: 2020 年 4 月 21 日火曜日 14:09:01 GMT 一致しない場合: "5e9efe7d-264" 安全でないアップグレード要求: 1 ユーザーエージェント: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/71.0.3578.98 Safari/537.36 どのようなテクノロジーにも 2 つの側面があります。HTTP 圧縮は帯域幅の使用量を削減し、応答速度を高速化できますが、追加の圧縮および解凍プロセスが必要になるため、クライアントまたはサーバーのコンピューティング リソースをある程度占有します。 HTTP に精通している読者は、HTTP メッセージ本文をエンコードおよび暗号化できることをご存知でしょう。実は、HTTP 圧縮は特殊なエンコード方式です。このエンコード方式を使用すると、メッセージのサイズを大幅に削減でき、対応する解決方法を使用すると元のメッセージを復元できます。 (圧縮技術の本質は実は一種のエンコード方式であることがわかります) HTTP 圧縮の使用シナリオ 上記の HTTP 圧縮の紹介から、このテクノロジは最適化テクノロジであり、帯域幅を節約して応答を高速化するために、サーバーから返されるメッセージを圧縮するためによく使用されることがわかります。 以下は、HTTP で Gzip 圧縮を使用するプロセスの簡単な紹介です。
クライアントは圧縮されたデータをサーバーに送信し、コードを通じて要求データを解凍することもできます。標準化のために、Content-Encoding:gzip も要求に追加する必要があります。 Nginx による HTTP 圧縮の実装 Nginx は HTTP Gzip 圧縮をサポートしています。ここでは、Nginx を調整して返信メッセージを圧縮する方法を説明します。 Nginx は、ngx_http_gzip_module モジュール、ngx_http_gzip_static_module モジュール、および ngx_http_gunzip_module モジュールを通じて Gzip 機能をサポートしています。通常、Nginx はデフォルトでこれらのモジュールをコンパイルします。インストールした nginx にこれらのモジュールが含まれているかどうかを確認するには、nginx -V コマンドを使用します。 Gzip 関連の指示は、構成ファイルの http ブロック、サーバー ブロック、またはロケーション ブロックに記述できます。 ngx_http_gzip_module モジュール ngx_http_gzip_module モジュールは、主に Gzip 関数の有効化と設定、および応答データに対するオンラインのリアルタイム圧縮の実行を担当します。このモジュールには、次の主なディレクティブが含まれています。 # Gzip 機能を有効または無効にします。デフォルトでは、このコマンドはオフに設定されており、Gzip 機能は有効になっていません。このディレクティブがオンに設定されている場合にのみ、他のディレクティブ設定が有効になります gzip on | off # Gzip 圧縮ファイルで使用されるキャッシュ領域のサイズを設定します。# デフォルト値: gzip_buffers 32 4k|16 8k gzip_buffers 数値サイズ; # このコマンドは、レベル 1 からレベル 9 までの Gzip 圧縮レベルを設定するために使用されます。 # レベル 1 は、圧縮レベルが最も低く、圧縮効率が最も高いことを意味し、レベル 9 は、圧縮レベルが最も高く、圧縮効率が最も低く、消費時間が最も長いことを意味します。 # デフォルトは1 gzip_comp_level レベル # 異なるタイプのクライアントによって開始されたリクエストに対して、Gzip 機能を選択的に有効または無効にすることができます。 # 正規表現をサポートします。正規表現はクライアントのブラウザ フラグ (User-Agent、UA) に基づいて設定されます。 gzip_disable 正規表現 ...; # この設定では、UC 文字列に MSIE 4、MSIE 5、および MSIE6 を含むすべてのブラウザーに一致する正規表現を使用します。 # これらのブラウザからのリクエストに応答する場合、Nginx サーバーは Gzip 圧縮を実行しません。 gzip_disable MSIE [4-6]\.; # 初期のブラウザや HTTP クライアントの中には Gzip 自己解凍をサポートしていないものがあり、文字化けした文字が表示されることがあります。そのため、HTTP プロトコルのバージョンごとに、Gzip 機能を有効化または無効化する必要があります。このディレクティブは、Gzip 機能を有効にするための最小 HTTP プロトコル バージョンを設定するために使用されます。 # デフォルト設定はバージョン 1.1 です。つまり、クライアントが HTTP プロトコル バージョン 1.1 以上を使用する場合にのみ、Gzip 関数を使用して応答出力データを圧縮します。 # 現在、ほとんどのブラウザは Gzip 自己解凍をサポートしているため、デフォルト値で十分です。 zip_http_バージョン 1.0 | 1.1; # このディレクティブはページのバイト数を設定します。Gzip 機能は、応答ページのサイズがこの値より大きい場合にのみ有効になります。 # gzip_min_length を 1024 に設定することをお勧めします。 gzip_min_length 長さ; # Nginx サーバーがバックエンド サーバーから返された結果に対して Gzip 圧縮を実行するかどうかを設定するために使用されます。 # 一般的に、バックエンドは restAPI インターフェースとして使用され、返されるデータの量はそれほど大きくないため、圧縮は推奨されません。 # バックエンドから返されるデータを本当に圧縮する必要がある場合は、このセクションの内容を確認できます gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...; # MIME タイプを設定します。設定されたタイプは圧縮されます。デフォルト値は text/html です。 # この変数は「*」に設定することもできます。これは、すべての MIME タイプのページ データを Gzip 圧縮することを意味します。# 通常は、次のように設定できます: gzip_types text/plain application/javascript text/css text/xml gzip_types MIME タイプ ...; # これをオンにすると、レスポンスヘッダーに Accept-Encoding: gzip が追加されます gzip_vary オン | オフ; ngx_http_gzip_static_module モジュール ngx_http_gzip_static_module モジュールは、主に Gzip 関数によって事前に圧縮されたデータの検索と送信を担当します。これらのデータは、拡張子「.gz」でサーバー上に保存されます。クライアントが要求したデータが以前に圧縮されており、クライアント ブラウザーが Gzip 圧縮をサポートしている場合は、圧縮されたデータが直接返されます。 このモジュールと ngx_http_gzip_module モジュールの主な違いは、このモジュールが静的圧縮を使用し、HTTP 応答ヘッダーにメッセージ本文の長さを示す Content-Length ヘッダー フィールドを含めることです。これは、サーバーが応答データの長さを判断できる場合に使用されます。一方、後者はデフォルトでチャンク エンコードされた動的圧縮を使用します。これは主に、大きなファイルのダウンロードなど、サーバーが応答データの長さを判断できず、データ長をリアルタイムで生成する必要がある状況に適しています。 このモジュールの命令の使用方法は、ngx_http_gzip_static_module モジュールの使用方法と似ているため、ここでは詳細には説明しません。公式ドキュメントを参照してください このモジュールは、Nginx サーバーのオプションの HTTP モジュールです。これを使用する場合は、Nginx プログラムを構成するときに --with-http_gzip_static_module ディレクティブを追加する必要があります。 ngx_http_gunzip_module モジュール Nginx サーバーは、応答出力データ ストリームの Gzip 圧縮をサポートしています。クライアント ブラウザーでは、Gzip 圧縮されたデータを解凍して処理できる必要があります。ただし、クライアント自体がこの機能をサポートしていない場合、Nginx サーバーはデータを送信する前に解凍する必要があります。これらの圧縮データは、バックエンド サーバーの圧縮または Nginx サーバーの事前圧縮から取得される場合があります。 ngx_http_gunzip_module モジュールは、Gzip 圧縮データの処理をサポートしていないクライアント ブラウザーの圧縮データを解凍するために使用されます。 同様に、このモジュールの使用方法についても詳しく説明しません。公式ドキュメントを参照してください。 最近のブラウザは一般的に圧縮をサポートしているため、このモジュールが使用される可能性は低くなります。 設定例 gzip オン; gzip_min_length 1000; gzip_proxied 期限切れ、キャッシュなし、保存なし、プライベート認証。 gzip_types テキスト/プレーン アプリケーション/xml; Nginx サーバーが Gzip 圧縮機能をグローバルに適用できるようにするには、Gzip 構成を http グローバル ブロックに配置します。各仮想ホストを別々に扱いたい場合は、 続きを読む 日常生活で開発されるすべてのアプリケーションが Nginx を使用するわけではありません。他の Web サーバーで HTTP 圧縮のサポートを有効にする方法を見てみましょう。 1. Spring Bootに組み込まれたTomcatの圧縮を有効にする Tomcat は、サーバー コンテナ + http サーバーとして、gzip 圧縮もサポートします。従来の Tomcat を使用する場合は、server.xml 構成で HTTP 圧縮を有効にするだけで済みます。 ただし、Spring Bean の特性により、Tomcat 関連の構成を含む、デフォルトでアセンブルされた Bean をオーバーライドできます。圧縮構成を有効にするには、TomcatConnectorCustomizer インターフェースを使用します。 パブリッククラスConnC1はTomcatConnectorCustomizerを実装します{ @オーバーライド パブリック void カスタマイズ(コネクタ コネクタ) { プロトコル ハンドラー protocolHandler = connector.getProtocolHandler(); if (protocolHandler インスタンス Http11NioProtocol) { Http11NioProtocol http11NioProtocol = (Http11NioProtocol) プロトコル ハンドラー; http11NioProtocol.setCompression("on");//デフォルトはオフ 圧縮可能なMimeTypeを設定します。 http11NioProtocol.setCompressionMinSize(2048);//デフォルト 2048(B) http11NioProtocol.setMaxKeepAliveRequests(1);//デフォルト 200 } } } Tomcat の HTTP 圧縮のサポートに関しては、Tomcat の CompressionConfig クラスから手がかりを探し始めることができます。 実際、圧縮のサポートを単純に有効にしたい場合は、Spring Boot で次の構成を行うだけです。 サーバ: 圧縮: 有効: true 最小応答サイズ: 1024 MIMEタイプ: アプリケーション/json 要約する Nginx の Gzip 機能に関するこの記事はこれで終わりです。Nginx の Gzip 機能についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: openlayers6のマップオーバーレイの詳細な説明
>>: mysqlは内部コマンドエラーの解決策ではありません
CSS3 を学ぶということは、新しい機能と基本的な理論に慣れることを意味します。この記事では、ケー...
body{font-size:12px; font-family:"宋体";}...
<br />フォームはユーザーが情報を送信するための重要なチャネルです。このセクションで...
mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...
1. テーブルAのデータを使用してMySQLのテーブルBの内容を更新するたとえば、データ テーブル内...
序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...
Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...
目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...
この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...
1. イジェクトが推奨されないのはなぜですか? 1. eject を実行した後、どのような変化があり...
コードをコピーコードは次のとおりです。 <フォームメソッド="post" ...
目次序文単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...
x-ua-compatible は、IE ブラウザがページを解析およびコンパイルするためのモデルを...
Linux で履歴レコードを表示し、タイムスタンプを追加するためのヒントbashに詳しい人なら、hi...
CentOS 7 の yum ソースには、MySQL を正常にインストールするための mysql-s...