HTTP/HTTPS 入門
HTTP(ハイパーテキスト転送プロトコル、Hypertext Transfer Protocol)ネットワークからローカルブラウザへハイパーテキストを転送するための転送プロトコルです。クライアントとサーバー間のリクエストとレスポンスの形式を定義しています。HTTP は TCP/IP モデルの上で動作し、通常はポート80。
HTTPS(ハイパーテキスト転送セキュアプロトコル、Hypertext Transfer Protocol Secure)HTTP の安全なバージョンであり、HTTP に SSL/TLS プロトコルを追加し、データの暗号化、完全性の検証、認証を提供します。HTTPS は通常ポート443。
HTTP
HTTP プロトコルは Hyper Text Transfer Protocol(ハイパーテキスト転送プロトコル)の略で、ワールドワイドウェブ(WWW: World Wide Web)サーバーからローカルブラウザへハイパーテキストを転送するための転送プロトコルです。
HTTP は TCP/IP 通信プロトコルに基づいてデータ(HTML ファイル、画像ファイル、検索結果など)を転送するプロトコルです。
HTTPS
HTTPS プロトコルは HyperText Transfer Protocol Secure(ハイパーテキスト転送セキュアプロトコル)の略で、コンピュータネットワークを介して安全に通信するための転送プロトコルです。
HTTP 自体は安全ではありません。転送されるデータが暗号化されておらず、盗聴や改ざんの可能性があるためです。この問題を解決するために、HTTP に SSL/TLS プロトコルを追加した HTTPS が導入され、データ転送に暗号化と認証を提供しています。
HTTPS は HTTP を介して通信しますが、SSL/TLS を利用してデータパケットを暗号化します。HTTPS が開発された主な目的は、Web サーバーの身元認証を提供し、交換するデータのプライバシーと完全性を保護することです。
HTTP の URL はhttp://で始まり、デフォルトでポート80、一方 HTTPS の URL はhttps://で始まり、デフォルトでポート443。

HTTP の動作原理
HTTP プロトコルはクライアント・サーバーアーキテクチャ上で動作します。
HTTP の動作プロセスは通常次のとおりです:- クライアントがリクエストを送信:ユーザーはクライアント(ブラウザなど)で URL を入力し、クライアントはサーバーに HTTP リクエストを送信します。
- サーバーがリクエストを処理:サーバーはリクエストを受信した後、リクエストの種類(GET、POST など)と要求されたリソースに応じて、対応する処理を行います。
- サーバーがレスポンスを返す:サーバーは処理結果を HTTP レスポンスメッセージとしてラップし、クライアントに送り返します。
- クライアントがページをレンダリング:クライアントはレスポンスを受信した後、レスポンスの内容(HTML、画像など)に基づいてページをレンダリングし、ユーザーに表示します。
Web サーバーには、Nginx サーバー、Apache サーバー、IIS サーバー(Internet Information Services)などがあります。
HTTP のデフォルトポート番号は 80 ですが、8080 や他のポートに変更することもできます。
HTTP の3つの注意事項:
HTTP はコネクションレス:コネクションレスの意味は、各接続が1つのリクエストだけを処理することに制限され、サーバーがクライアントのリクエストを処理し、クライアントの応答を受信したら接続を切断することです。この方法を採用することで転送時間を節約できます。
HTTP はメディアに依存しません:つまり、クライアントとサーバーがデータ内容の処理方法を知っていれば、あらゆる種類のデータを HTTP で送信でき、クライアントとサーバーは適切な MIME-type コンテンツタイプを指定して使用します。
HTTP はステートレス:HTTP プロトコルはステートレスプロトコルです。ステートレスとは、プロトコルがトランザクション処理の記憶能力を持たないことを指します。状態がないということは、後続の処理で以前の情報が必要な場合、それを再送信しなければならず、これにより毎回の接続で転送するデータ量が増える可能性があります。一方、サーバーが以前の情報を必要としない場合は、応答が速くなります。
以下の図は HTTP プロトコルの通信フローを示しています:

HTTPS の役割
HTTPS の主な役割は、安全でないネットワーク上に安全なチャネルを作成し、適切な暗号化パッケージとサーバー証明書が検証可能かつ信頼できる場合に、盗聴や中間者攻撃に対する合理的な防御を提供することです。
HTTPS の信頼は、オペレーティングシステムに事前にインストールされた認証局(CA)に基づいています。
したがって、ウェブサイトとの HTTPS 接続は、以下の場合にのみ信頼できます:
- ブラウザが HTTPS を正しく実装しており、オペレーティングシステムに正しく信頼された認証局がインストールされている場合;
- 認証局が合法的なウェブサイトのみを信頼している場合;
- アクセスしたウェブサイトが有効な証明書を提供している場合、つまりオペレーティングシステムが信頼する認証局によって発行された証明書である場合(ほとんどのブラウザは無効な証明書に対して警告を表示します);
- その証明書は、アクセスされたウェブサイトを正しく検証しています(例えば、https://www.example.comアクセスした際に、www.example.com に対して発行された証明書を、他のドメインではなく受け取った場合);
- このプロトコルの暗号化層(SSL/TLS)は、認証と高強度の暗号化を効果的に提供できます。
Google Chrome、Internet Explorer、Firefox などのブラウザは、ウェブサイトに暗号化されたコンテンツと暗号化されていないコンテンツで構成される混合コンテンツが含まれている場合、警告を表示します。
HTTP リンクは安全ではないと表示されます:

HTTPS リンクは安全と表示されます:

HTTP と HTTPS の違い
HTTP と HTTPS は名前が非常に似ていますが、安全性には本質的な違いがあります。HTTPS は SSL/TLS プロトコルを使用することで、データ転送に暗号化と完全性の検証を提供し、ユーザーのプライバシーとデータの安全性を保護します。ネットワークセキュリティ意識の高まりに伴い、ユーザーデータを保護するために HTTPS を使用するウェブサイトが増えています。

同時に、主流のブラウザや検索エンジンもウェブサイトに HTTPS の使用を推奨しています。
したがって、機密情報の転送を伴うウェブサイトでは、安全性を高めるために HTTPS の使用を推奨します。
主な違いは次のとおりです:
-
暗号化:
- HTTP:データ転送中は暗号化されないため、傍受や改ざんが容易です。
- HTTPS:SSL/TLS プロトコルを使用して転送データを暗号化し、データ転送中の安全性を保護します。
-
ポート:
- HTTP:デフォルトでポート 80 を使用します。
- HTTPS:デフォルトでポート 443 を使用します。
-
安全性:
- HTTP:データ暗号化を提供しないため、安全性は低くなります。
- HTTPS:データ暗号化と完全性の検証を提供するため、安全性は高くなります。
-
証明書:
- HTTP:証明書は不要です。
- HTTPS:暗号化を有効にし、サーバーの身元を検証するために SSL 証明書が必要です。
-
パフォーマンス:
- HTTP:データを暗号化しないため、パフォーマンスは HTTPS よりわずかに高くなります。
- HTTPS:暗号化と復号化が必要なため、ある程度のパフォーマンスオーバーヘッドが発生する可能性があります。
-
検索エンジン最適化(SEO):
- HTTP:検索エンジンは HTTPS を使用していないウェブサイトのランキングを下げる可能性があります。
- HTTPS:検索エンジンは HTTPS を使用するウェブサイトを優先的にインデックスして表示する傾向があります。
-
ブラウザの表示:
- HTTP:ほとんどの最新ブラウザでは、HTTP ウェブサイトは通常「安全ではありません」と表示されます。
- HTTPS:ブラウザは鍵アイコンを表示し、ウェブサイトが安全であることを示します。
-
コスト:
- HTTP:通常は無料です。
- HTTPS:SSL 証明書の購入が必要で、ある程度のコストがかかる場合があります。
-
適用シナリオ:
- HTTP:機密情報を転送する必要がないウェブサイトに適しています。例:ニュースサイト、ブログなど。
- HTTPS:機密情報を転送する必要があるウェブサイトに適しています。例:オンラインバンキング、オンラインショッピング、電子メールなど。