web-dev-qa-db-ja.com

HTTPとHTTPSのパフォーマンス

Httpとhttpsのパフォーマンスに大きな違いはありますか?私は、HTTPSはHTTPの5分の1の速さになる可能性があることを読んだことを思い出します。これは現在の世代のWebサーバー/ブラウザでも有効ですか?もしそうなら、それをサポートするためのホワイトペーパーはありますか?

356
Jim Geurts

これに対する非常に簡単な答えがあります。あなたの特定の状況に対するパフォーマンスペナルティが何であるかを見るためにあなたのウェブサーバーのパフォーマンスをプロファイルしてください。HTTPサーバーとHTTPSサーバーのパフォーマンスを比較するためのツールがいくつかあり(JMeterとVisual Studioが思い浮かぶ)、それらは非常に使いやすいです。

someWebサイトの性質、ハードウェア、ソフトウェア、およびネットワーク構成に関する情報がなければ、だれも意味のある答えを出すことはできません。

他の人が言っているように、暗号化によるある程度のオーバーヘッドがあるでしょう、しかしそれは非常に依存しています:

  • ハードウェア
  • サーバーソフトウェア
  • 動的コンテンツと静的コンテンツの比率
  • サーバーまでのクライアント距離
  • 典型的なセッションの長さ
  • その他(私の個人的なお気に入り)
  • クライアントのキャッシュ動作

私の経験では、動的コンテンツを重視するサーバーはHTTPSによる影響が少ない傾向があります。暗号化に費やされる時間(SSLオーバーヘッド)は、コンテンツ生成時間と比べてわずかなためです。

メモリ内に簡単にキャッシュできる静的ページのかなり小さいセットを処理することに重いサーバーは、はるかに高いオーバーヘッドを被ります(ある場合には、スループットは「イントラネット」上で制限されていました)。

編集:他のいくつかによって提起されている一つのポイントは、SSLハンドシェイクはHTTPSの主要なコストであるということです。それは正しいです、それが「典型的なセッションの長さ」と「クライアントのキャッシュ動作」が重要である理由です。

非常に短いセッションの数が多いと、ハンドシェイク時間が他のパフォーマンス要因を圧倒することになります。セッションが長くなると、セッション開始時にハンドシェイクコストが発生しますが、それ以降の要求では比較的オーバーヘッドが少なくなります。

クライアントのキャッシュは、大規模なプロキシサーバーから個々のブラウザのキャッシュまで、いくつかのステップで実行できます。一般に、HTTPSコンテンツは共有キャッシュにキャッシュされません(ただし、これを実現するために、少数のプロキシサーバーが中間者型の動作を悪用する可能性があります)。多くのブラウザは現在のセッションのHTTPSコンテンツをキャッシュし、セッションをまたがってキャッシュすることもあります。非キャッシングまたは少ないキャッシングの影響は、クライアントが同じコンテンツをより頻繁に取得することを意味します。これにより、同数のユーザーにサービスを提供するための要求と帯域幅が増えます。

226
James Schek

HTTPSでは最初のハンドシェイクが必要ですが、これは非常に遅くなる可能性があります。ハンドシェイクの一環として転送される実際のデータ量はそれほど大きくありません(通常5 KB未満)が、非常に小さな要求では、これはかなりのオーバーヘッドになる可能性があります。ただし、ハンドシェイクが完了すると、非常に高速な形式の対称暗号化が使用されるため、オーバーヘッドは最小限になります。つまり、HTTPSを介して短いリクエストを大量に作成することは、HTTPよりもかなり遅くなりますが、1回のリクエストで大量のデータを転送する場合、その違いはわずかです。

しかし、HTTP/1.1ではキープアライブがデフォルトの動作なので、singleハンドシェイクをしてから、同じ接続で多数の要求を行います。これはHTTPSに大きな違いをもたらします。あなたはたぶん確かにするためにあなたのサイトをプロファイルするべきです(他の人が示唆しているように)、しかし私はパフォーマンスの違いが顕著にならないと思う。

214
Graeme Perrow

HTTPSによってレイテンシーがどのように増加するかを実際に理解するには、HTTPS接続がどのように確立されるかを理解する必要があります。これが Nice diagram です。重要なのは、クライアントが2 "レッグ"後にデータを取得するのではなく(1往復、リクエストを送信し、サーバーが応答を送信する)、クライアントは少なくとも4レッグ(2往復)までデータを取得しないことです。 。そのため、パケットがクライアントとサーバーの間を移動するのに100ミリ秒かかる場合、最初のHTTPS要求は少なくとも500ミリ秒かかります。

もちろん、これは(ブラウザが行うべき)HTTPS接続を再利用することによって軽減することができますが、HTTPS Webサイトをロードするときの最初の機能停止の一部を説明しています。

100
twk

オーバーヘッドは暗号化によるものではありません。最近のCPUでは、SSLに必要な暗号化は簡単です。

オーバーヘッドはSSLハンドシェイクによるもので、これは時間がかかり、HTTPセッションを介したHTTPSセッションに必要なラウンドトリップ数を大幅に増加させます。

サーバーがシミュレートされた高遅延リンクの終端にある間のページロード時間を測定します(Firebugなどのツールを使用して)。待ち時間の長いリンクをシミュレートするためのツールが存在します - Linuxには「netem」があります。同じ設定でHTTPとHTTPSを比較します。

以下のようにして、待ち時間をある程度軽減することができます。

  • サーバーがHTTPキープアライブを使用していることを確認する - これにより、クライアントはSSLセッションを再利用でき、別のハンドシェイクが不要になります。
  • 可能な限りリソースを結合し(.jsにファイル、CSSなど)、クライアント側のキャッシュを促進することで、リクエスト数をできるだけ少なくする。
  • ページの読み込み数を減らします。不要なデータを(おそらく隠れたHTML要素の中で)ページにロードしてから、それをclient-scriptを使って表示することによって。
76
MarkR

2014年12月の更新

あなたは簡単にあなたのブラウザでHTTPとHTTPSのパフォーマンスの違いをテストすることができますHTTP vs HTTPS Testウェブサイト - AnthumChris :このページでは、安全でないHTTP接続と暗号化されたHTTPS接続での読み込み時間を測定しています。どちらのページも、キャッシュされていない360個のユニークな画像(合計2.04 MB)をロードします。」

結果はあなたを驚かせるかもしれません。

暗号化しよう認証局が無料の自動発行を開始するため、HTTPSのパフォーマンスに関する最新の知識を持っていることが重要です。 Mozilla、Akamai、Cisco、Electronic Frontier Foundation、およびIdenTrustのおかげで、2015年夏にSSL証明書を開くことができます。

2015年6月の更新

Let's Encryptの最新情報 - 2015年9月に到着予定:

Twitterの詳細情報: @ letsencrypt

HTTPSおよびSSL/TLSのパフォーマンスの詳細については、以下を参照してください。

HTTPSを使用することの重要性の詳細については、以下を参照してください。

まとめると、 Ilya Grigorik"TLSにはパフォーマンス上の問題が1つあります。十分には使用されていません。他のものはすべて最適化できます。"

Chris - HTTP vs HTTPS Test ベンチマークの作者 - 以下の彼のコメントに感謝します。

25
rsp

現在のトップの答え 完全には正しくありません。

他の人がここで指摘したように、httpsはハンドシェイクを必要とし、それ故より多くのTCP/IPラウンドトリップをします。

WAN環境では通常、待ち時間が制限要因となり、サーバーのCPU使用率の増加ではありません。

ヨーロッパから米国までの待ち時間は約200ミリ秒(トランジット時間)になる可能性があることに注意してください。

HTTPWatch を使うと、これを簡単に測定できます(シングルユーザーの場合)。

23
kohlerm

これまでに述べたことすべてに加えて、セキュリティ上の理由から、一部の(すべての)WebブラウザはHTTPS経由で取得したキャッシュコンテンツをローカルハードドライブに保存しないことに注意してください。つまり、ユーザーの視点から見ると、ブラウザを再起動した後の静的コンテンツが多いページの読み込みは遅くなり、サーバーの視点から見ると、HTTPSを介した静的コンテンツに対するリクエストの量はHTTPを超えています。

12
Alexander

多くの場合、SSLセッションは両端(デスクトップとサーバー)でキャッシュできるため、SSLハンドシェイクのパフォーマンスへの影響は軽減されます。たとえばWindowsマシンでは、SSLセッションは最大10時間キャッシュできます。 http://support.Microsoft.com/kb/247658/EN-US を参照してください。一部のSSLアクセラレータには、セッションがキャッシュされる時間を調整できるようにするパラメータもあります。

考慮すべきもう1つの影響は、HTTPS経由で提供される静的コンテンツはプロキシによってキャッシュされないことです。これにより、同じプロキシ経由でサイトにアクセスする複数のユーザーにわたるパフォーマンスが低下する可能性があります。特に指示がない限り、Internet Explorerバージョン6および7はキャッシュ可能なHTTPS静的コンテンツをデスクトップにもキャッシュするため、ツールメニュー/インターネットオプション/詳細設定/セキュリティ/暗号化されたページを保存しないでください。ディスクに)。

6
ZX81

これに対する唯一の答えはありません。

暗号化は常により多くのCPUを消費します。これは多くの場合専用ハードウェアにオフロードでき、コストは選択したアルゴリズムによって異なります。たとえば、3desはAESよりも高価です。いくつかのアルゴリズムは、暗号解読者よりも暗号解読者にとって高価です。反対のコストがかかるものもあります。

バルク暗号よりも高価なのはハンドシェイクコストです。新しい接続ははるかに多くのCPUを消費します。これは、セッションが再開されるまで減らすことができます。ただし、期限切れになるまで古いセッションの秘密を保持するという代償があります。これは、クライアントからの小さなリクエストで、それ以上戻ってこないものが最も高価であることを意味します。

クロスインターネットトラフィックでは、利用可能な帯域幅が低すぎるため、データレートでこのコストに気付かない場合があります。しかし、ビジー状態のサーバーのCPU使用率には必ず気付くでしょう。

6
Darron

私はあなたに言うことができます(ダイヤルアップユーザーとして)SSLを介した同じページは通常のHTTPを介した場合よりも数倍遅いです...

6
Brian Knoblauch

私は小さな実験を行い、flickr(233 kb)から同じ画像に対して16%の時間差を得ました。

http://farm8.staticflickr.com/7405/13368635263_d792fc1189_b.jpg

https://farm8.staticflickr.com/7405/13368635263_d792fc1189_b.jpg

enter image description here

もちろん、これらの数値は、コンピュータのパフォーマンス、接続速度、サーバーの負荷、パス上のQoS(ブラウザからサーバーまでの特定のネットワークパス)など、さまざまな要因によって異なりますが、一般的な考え方です。より多くの操作を完了するように要求します(SSLハンドシェークおよびデータのエンコード/デコード)。

4
Khachatur

これは、SSLハンドシェイクの待ち時間に関する素晴らしい記事です(少し古いですが、まだ素晴らしいです)。遅いインターネット接続を介して私のアプリを使用していたクライアントにとって、SSLが遅いことの主な原因として特定されました。

http://www.semicomplete.com/blog/geekery/ssl-latency.html

3
OrPo

HTTPとHTTPSのパフォーマンス比較

私はいつも普通の古いHTTPと比較して遅いページロード時間にHTTPSを関連付けました。 Web開発者として、Webページのパフォーマンスは私にとって重要であり、私のWebページのパフォーマンスを低下させるものは何もありません。

パフォーマンスへの影響を理解するために、以下の図は、HTTPSを使用してリソースを要求したときに内部で何が起こるかの基本的な考え方を示しています。

enter image description here

上の図からわかるように、通常のHTTPを使用する場合と比較して、HTTPSを使用する場合に実行する必要がある追加の手順がいくつかあります。 HTTPSを使用してリクエストを送信すると、リクエストの信頼性を検証するためにハンドシェイクが発生する必要があります。このハンドシェイクはHTTPリクエストと比較すると余分なステップであり、残念ながらオーバーヘッドが発生します。

パフォーマンスへの影響を理解し、パフォーマンスへの影響が大きいかどうかを確認するために、このサイトをテストプラットフォームとして使用しました。私はwebpagetest.orgに行き、視覚的比較ツールを使用して、HTTPSとHTTPを使用してこのサイトの読み込みを比較しました。

ご覧のとおり これがHTTPSを使用したテストビデオの結果 ですが、ページの読み込み時間には影響しませんでしたが、その違いは無視できる程度であり、 300ミリ秒の差これらの時間は、コンピューターのパフォーマンス、接続速度、サーバーの負荷、サーバーからの距離など、さまざまな要因によって異なることに注意することが重要です。

あなたのサイトは異なるかもしれません、そしてあなたのサイトを徹底的にテストし、HTTPSへの切り替えに伴うパフォーマンスへの影響をチェックすることが重要です。

WEパフォーマンスを向上させることはできますか? 詳細な情報を得るにはここ にアクセスしてください。

2
Sunny S.M

TLSはまだ速いのですか?はい。

行を曖昧にし、HTTPSを同じくらい速くすることを目的とした多くのプロジェクトがあります。 SPDYmod-spdy のように。

2

ここでは厄介なEdgeのケースがあるようです。

Ajaxは通常、KeepAliveが20秒後にタイムアウトしたことを意味します。しかし、wifiは(理想的には速い)ajax接続が複数のラウンドトリップをしなければならないことを意味します。さらに悪いことに、無線LANはしばしばパケットを失い、TCP再送信があります。この場合、HTTPSは本当にひどいパフォーマンスをします。

2
Richard

私は自分のプロジェクトで同じ問題を調査しているので、これらのスライドを見つけました。古くておもしろい

http://www.cs.nyu.edu/artg/research/comparison/comparison_slides/sld001.htm

2
Mircea Stanciu

これを測定する方法があります。 Apacheのjmeterというツールがスループットを測定します。 SSLを使用しても使用しなくても、jmeterを使用してサービスの大規模なサンプリングを管理された環境で設定した場合は、相対コストを正確に比較する必要があります。私はあなたの結果に興味があるでしょう。

0
dacracot