web-dev-qa-db-ja.com

httpsに切り替えた後にサイトの読み込みが遅くなるのはなぜですか?

私は自分のウェブサイトでSSL証明書を購入して実装しましたが、以前よりも読み込みにかなり時間がかかるようです。

なぜこれが起こり、どのように修正できますか?

4
Punct Ulica

これは、このプラットフォームには広すぎるかもしれない質問です。暗号化は計算オーバーヘッドを伴うことは事実ですが、適切な構成では無視できる場合があります。

このビデオ 2014年半ばから、TLSの実装に関する一般的な問題と神話について、そしてなぜそれが遅くなる可能性があり、なぜそうすべきではないかについてかなり説明しています。

私の提案は次のとおりです。シェルでNice topコマンドを使用してセットアップし、サーバーからページを要求します。パフォーマンスと、それを使用するプログラムを確認してください。また、Firebug(Mozilla Firefox用)などのツールをインストールして、サーバーに接続しているクライアントによって実行されたリクエストを確認することもできます。

それが共有ホスティングの問題である場合もあります。その場合、問題は手の届かないところにある可能性があります。

4
0xCAFEBABE

すべてのデータを暗号化すると、多少の計算オーバーヘッドが追加されますが、適切なサーバーではこれは問題になりません。

TLSについて本当に迷惑なのは、最初の接続に時間がかかることです。リクエストの送信は、単一のパケットをサーバーに送信して応答を待つのと同じくらい簡単だと思うかもしれませんが、そうではありません:

  1. 最初に、クライアントはサーバーへのTCP接続を確立する必要があります(これは通常のhttpにも当てはまります)。次に、クライアントはサーバーから接続が受け入れられたことを示す応答を受け取ります。 1往復(サーバーに1パケットを送信し、応答を待っています。)

  2. 次に、クライアントはサーバーと通信して安全なTLS接続を確立する必要があります。これには、より多くの小さなパケットを前後に送信することが含まれます。 TLSハンドシェイクは、TCPハンドシェイクよりも長くなっています。2回のラウンドトリップといくつかの数値計算。

  3. TLS接続を使用して、クライアントはサーバーに要求を送信し、応答を受信します。 1往復+時間がかかる可能性のあるHTTP応答の生成。


HTTPSの初期接続の確立には、プレーンHTTPの2倍のラウンドトリップがあり、サーバーでの処理が多くなります。

  • サーバーの負荷が高いと、計算の増加が遅くなります。

  • サーバーから遠く離れたクライアントは、ping時間の影響を受けます。ラウンドトリップごとに1回のping時間かかります。プレーンHTTPは2つのpingのみを受け取り、HTTPSは4つのpingを受け取ります。


さらに悪いことに、訪問者がブラウザの前にhttps://を付けずにドメイン名またはアドレスを入力した場合、最初に通常のHTTP接続を確立してからリダイレクトされ、HTTPS接続を確立する必要があります。

  1. ポート80へのTCP接続を確立します

  2. HTTPリクエストを送信し、https://バージョンへの301リダイレクトを受信します。

  3. ポート443へのTCP接続を確立します

  4. TLSハンドシェイク

  5. TLSハンドシェイク

  6. HTTP要求を再度送信し、応答を待ちます。

それには、6回のping、いくつかの処理、および不要な小さなリクエストが必要です。

3
Oskar Skog