web-dev-qa-db-ja.com

SSL経由でgzipを使用できますか? And Connection:Keep-Aliveヘッダー

安全な(SSL)Webアプリのフロントエンドパフォーマンスをここで評価しています。SSLを介してテキストファイル(html/css/javascript)を圧縮できるかどうか疑問に思っています。私はグーグルで調べましたが、SSLに特に関連するものは見つかりませんでした。可能であれば、応答も暗号化されているので、CPUサイクルを追加する価値はありますか?応答を圧縮するとパフォーマンスが低下しますか?

また、SSLハンドシェイクを何度も行わないように、SSL接続を維持していることを確認したいと思います。 responseヘッダーにConnection:Keep-Aliveが表示されません。 requestヘッダーにKeep-Alive:115が表示されますが、これは115ミリ秒間接続を維持しているだけです(1つの要求が処理された後、アプリサーバーが接続を閉じているようです)。セッション非アクティブタイムアウトである限り、サーバーがresponseヘッダーを設定するようにしますか?

ブラウザはSSLコンテンツをディスクにキャッシュしないので、何も変更されていなくても、以降のアクセスで同じファイルを繰り返し提供していることを理解しています。主な最適化の推奨事項は、HTTPリクエストの数の削減、縮小、スクリプトの最下部への移動、画像の最適化、可能なドメインシャーディング(別のSSLハンドシェイクのコストを比較検討する必要があります)などです。

33
magenta

はい、SSLを介して圧縮を使用できます。これは、データが暗号化される前に行われるため、低速リンクを介して助けることができます。これは悪い考えです: これも脆弱性を開きます

最初のハンドシェイク後、SSLは多くの人が考えるよりもオーバーヘッドが少なくなります*-クライアントが再接続した場合でも、キーを再ネゴシエートせずに既存のセッションを続行するメカニズムがあり、CPU使用量とラウンドトリップが減少します。

ただし、ロードバランサーは継続メカニズムを利用することができます。サーバー間でリクエストが交互に行われる場合は、さらに完全なハンドシェイクが必要であり、顕著な影響(リクエストあたり数百ミリ秒)が生じる可能性があります。すべてのリクエストを同じIPから同じアプリサーバーに転送するようにロードバランサーを構成します。

どのアプリサーバーを使用していますか?キープアライブやファイルの圧縮などを使用するように構成できない場合は、canが可能なリバースプロキシの背後に配置することを検討してください(そして、その間にリラックスします)静的コンテンツとともに送信されるキャッシュヘッダー-HttpWatchSupportのリンクされた記事には、その前に役立つヒントがいくつかあります)。

(* SSLハードウェアベンダーは「最大で5倍のCPU」などと言いますが、一部の Googleのchaps は、GmailがデフォルトでSSLに移行すると、CPU負荷の約1%しか占めなかったと報告しています)

31
SimonJ
  1. おそらくTLS圧縮を使用しないでください。一部のユーザーエージェント(少なくともChrome)はとにかくそれを無効にします。

  2. HTTP圧縮を選択的に使用できます

  3. いつでも縮小できます

  4. キャッシングについても話しましょう

HTTPS EverywhereスタイルのWebサイトを使用していると想定します。

シナリオ:

  1. Cssやjsなどの静的コンテンツ:

    • HTTP圧縮を使用する
    • 縮小を使用する
    • 長いキャッシュ期間(1年など)
    • etagはわずかにしか役に立ちません(長いキャッシュのため)
    • キャッシュバストできるように、このアセットを指すHTMLのURLにある種のバージョン番号を含めます
  2. 機密情報がゼロのHTMLコンテンツ(About Usページなど):

    • HTTP圧縮を使用する
    • HTML縮小を使用する
    • 短いキャッシュ期間を使用する
    • Etagを使用する
  3. 機密情報(CSRFトークンや銀行口座番号など)を含むHTMLコンテンツ:

    • HTTP圧縮なし
    • HTML縮小を使用する
    • Cache-Control: no-store, must-revalidate
    • etagはここでは無意味です(再検証のため)
    • セッションのタイムアウト後にページをリダイレクトするためのいくつかのロジック(複数のタブを考慮に入れて)。誰かがブラウザの[戻る]ボタンを押すと、キャッシュヘッダーが原因で機密情報が表示されません。

機密データIFでHTTP圧縮を使用できます。

  1. 応答でユーザー入力を返すことはありません(検索ボックスを取得しましたか?HTTP圧縮を使用しません)
  2. または、応答でユーザー入力を返しますが、応答にランダムにパディングします
19
Neil McGuigan

SSLで圧縮を使用すると、BREACH、CRIME、またはその他の選択されたプレーンテキスト攻撃などの脆弱性に遭遇します。

SSL/TLSには現在、これらの長さのOracle攻撃を軽減する方法がないため、圧縮を無効にする必要があります。

11
Rodney

最初の質問です。SSLは圧縮とは異なるレイヤーで機能しています。ある意味では、これら2つはWebサーバーの機能であり、一緒に機能し、重複することはありません。はい。圧縮を有効にすると、サーバーで使用するCPUは増えますが、送信トラフィックは少なくなります。ですから、それはトレードオフです。

2番目の質問:キープアライブの動作は実際にはHTTPバージョンに依存しています。静的コンテンツを非SSLサーバーに移動できます(画像、ムービー、オーディオなどが含まれる場合があります)

0
Zepplock

はい、gzip圧縮とキープアライブはHTTPS/SSLで使用できます。また、ブラウザはSSLコンテンツをキャッシュできます。

このブログ投稿には、HTTPS/SSL向けのWebサイトの調整に関する詳細情報があります。

http://blog.httpwatch.com/2009/01/15/https-performance-tuning/

0