インターネットでウェブサイトを見たり、メールを送ったりするときって、知らないうちにいろんな「約束事」が働いてるんだよね。でも「HTTP」とか「HTTPS」って言葉を見かけても、「何それ?」って感じじゃないかな。この記事を読めば、ウェブの裏側で起きてることが、スッキリわかるようになるよ。
- HTTPはインターネットでデータをやり取りするときの決まりで、パソコンとウェブサーバーが同じルールで通信するために必要
- HTTPSはHTTPに暗号化という安全機能を加えたもので、パスワードや個人情報を守ってくれる
- ブラウザのアドレスバーに鍵マークがあればHTTPSで安全な接続だと判断できる
もうちょっと詳しく
HTTPは「HyperText Transfer Protocol」の略で、ハイパーテキスト(画像や動画も含むウェブコンテンツ)を転送するときの約束ごとです。1990年頃にティム・バーナーズ・リーという人が発明して、それ以来ずっとインターネットの基本的な通信方法として使われています。私たちがウェブサイトを開く、その裏側ではHTTPがせっせと働いているんですよ。HTTPがなかったら、パソコンがサーバーに何を求めてるのか、サーバーが何を返してるのか、全く意味不明になってしまうんです。つまり、HTTPは「インターネットの共通言語」みたいなものなんですね。
HTTPは1990年頃からずっと使われてる歴史のあるルール。新しいテクノロジーじゃなくて、ウェブの基本中の基本です。
⚠️ よくある勘違い
→ HTTPSはHTTPの拡張版。基本はHTTPで、そこに暗号化という層を追加したものです。
→ 正しい理解。HTTPSの「S」が「Secure(安全)」を意味してることからもわかるように、安全性を高めたHTTPなんです。
[toc]
HTTPってそもそも何なの?インターネットの「共通言語」の話
インターネットの世界で、パソコンやスマホとウェブサーバーがデータをやり取りするとき、何か決まったやり方があるんだって話をしましたね。それがHTTPなんです。もう少し詳しく説明すると、HTTPは「決まったフォーマット」でデータを送り合う仕組みなんですよ。
HTTPが必要な理由
例えば、あなたがウェブサイトを見たいときって、ブラウザのアドレスバーに「www.example.com」って打ち込みますよね。その瞬間、あなたのパソコンはサーバー(つまり、そのウェブサイトを保管してるコンピュータ)に「このサイトを見たいんです」というお願いを送るんです。でもここで大事なのは、「見たいんです」という気持ちを送るんじゃなくて、「決まった形式」でお願いを送らなきゃいけないってこと。
もし、パソコンが「見たいです」って送ったとして、サーバーが「このメッセージは何だ?わからん」って返したら?通信が成立しません。だから、世界中のパソコンとサーバーが「このフォーマットで送ろう」って決めたのがHTTPなんです。これが「共通言語」ってわけですね。
HTTPの「リクエスト」と「レスポンス」
HTTPでは、やり取りが決まった順番で進みます。あなたのパソコンが「リクエスト」(つまり、お願い・要求)を送って、サーバーが「レスポンス」(つまり、返答)を返す。これが基本的なやり方なんです。
具体的に言うと、こんな流れです。あなたが「www.google.com」を見たいってアドレスバーに打つ。すると、あなたのパソコンは「GETというメソッド(つまり、データをください、という命令)でwww.google.comのトップページをください」というリクエストをサーバーに送ります。サーバーはそれを受け取って「OK、ここがそのページです」とレスポンスを返す。すると、あなたのパソコンがそれを受け取ってブラウザに表示する。これが毎回起きてるんですよ。
HTTPメソッドって何?
さっき「GET」という命令の話をしましたね。実は、HTTPにはいろんな命令があるんです。これを「HTTPメソッド」と言うんですよ。つまり「パソコンがサーバーにどんなお願いをするか」を表す命令の種類ですね。
代表的なメソッドを説明すると:
- GET:データをください、という命令。ウェブサイトを見るときはほぼこれです。
- POST:データを送ります、という命令。ログインするときとかフォームに入力したデータを送るときに使います。
- PUT:データを更新してください、という命令。データを置き換えるときに使います。
- DELETE:データを削除してください、という命令。その名の通りです。
普通のユーザーがウェブサイトを見てるときは、ほぼGETしか使わないんです。でもウェブアプリケーション(ウェブ上で動くアプリ)やスマホアプリの裏側では、POSTやPUT、DELETEが使われてるんですよ。
HTTPのステータスコードって何?サーバーからの「返事」の読み方
ウェブサイトを見てるときに、たまに「404 Not Found」とか「500 Internal Server Error」みたいなエラーメッセージを見たことありませんか?あれ、実はサーバーからの返事なんですよ。それが「ステータスコード」っていう三ケタの数字なんです。
ステータスコードの種類
ステータスコードは、「リクエストがうまくいったのか」「失敗したのか」を表す番号です。数字の最初の一ケタで大体の意味が決まります。
- 1xx(100番台):処理の途中。ほぼ表に出ないです。
- 2xx(200番台):成功。「200 OK」が最も一般的。リクエストがうまくいった、という意味です。
- 3xx(300番台):リダイレクト。つまり、別のページに案内するよ、という意味。「301 Moved Permanently」とか「302 Found」とか。
- 4xx(400番台):クライアントエラー。あなたのパソコンからのお願いが悪い、という意味。「404 Not Found」は「そのページはありません」って意味だし、「403 Forbidden」は「そのページは見る権限ありません」って意味です。
- 5xx(500番台):サーバーエラー。サーバーが悪い、という意味。「500 Internal Server Error」はサーバーで何かエラーが起きた、「503 Service Unavailable」はサーバーが今使えません、って意味です。
エラーが出たときは何が起きてるのか
404エラーが出たときを例に考えてみましょう。「あのページ、見たいな」とリクエストを送ったのに「そんなページない」って返されるわけです。これは、そのページが削除されたか、アドレスが間違ってるか、どちらかの可能性が高いんですよ。
一方、500番台のエラーが出たときは、サーバーが何か問題を抱えてるってことです。あなたのリクエスト自体は間違ってないんだけど、サーバーがそれに答えられない状態。こういうときは、時間を置いて再度アクセスすると治ってることが多いです。
HTTPSで安全な通信、パスワードと個人情報を守る話
HTTPについて説明してきたんですが、ここで大事な話をしなきゃいけません。実は、普通のHTTPは「丸見え」なんです。つまり、あなたがサーバーに送ったデータが、インターネットの途中で他の人に見られちゃう可能性があるんですよ。怖いですよね?
HTTPはどうして安全じゃないの?
HTTPでデータを送るときって、そのデータがそのままネットワークを通って移動するんです。もし、悪い人がそのネットワークを盗み見したら、あなたのパスワードとか、クレジットカード番号とか、全部見られちゃうんですよ。これを「平文送信」って言うんです。つまり、暗号化されていない状態で送ってる、ってことですね。
例えば、図書館の公開パソコンでログインするとき、普通のHTTPでやったら、図書館のWiFiに接続してる他の人に、あなたのIDとパスワードが見えちゃうかもしれないわけです。ヤバいですよね。
HTTPSで暗号化される
だから登場したのがHTTPSなんです。HTTPSは、データを送る前に「暗号化」するんです。つまり、データを「何か分からない形」に変えちゃって、送るってことですね。
イメージとしては、こんな感じです。あなたがサーバーに「password123」って送りたいとします。普通のHTTPだと「password123」そのまんまが飛びますね。でも、HTTPSだと「xK9mQ2vL7pR」みたいに、全く分からない形に変わって飛ぶんです。そしてサーバー側で、それを「password123」に戻すんですよ。
SSL証明書って何?
HTTPSでこの暗号化が安全に行われるために必要なのが「SSL証明書」(つまり「安全な通信をしてますよ」という証明書)なんです。信頼できるサイトには、必ずこのSSL証明書が用意されてるんですよ。
ブラウザのアドレスバーを見てください。「https://」って書いてあって、その横に鍵マークがありますよね?あの鍵マークがあれば「このサイト、SSL証明書を持ってる。つまり、安全に暗号化して通信してるんだ」ってわかるんです。
逆に、鍵マークがなかったり、「保護されていません」という警告が出てるサイトは、HTTPSじゃない(普通のHTTP)か、SSL証明書が無効な状態ですね。そういうサイトではパスワードとか個人情報を入力しちゃダメですよ。
HTTPの仕組み、もっと掘り下げると…通信の細かい流れ
ここまで、HTTPやHTTPSの基本的な話をしてきましたね。でも、インターネットの裏側では、もっと細かいやり取りが起きてるんです。その流れを少し詳しく見てみましょう。
TCP/IPという、さらに下の層がある
実は、HTTPより下に「TCP/IP」という別の通信ルールがあるんです。つまり、階層構造になってるんですよ。
イメージとしては、こんな感じです。一番下にTC/IP(つまり「ネットワークでデータを確実に届ける約束ごと」)があって、その上にHTTP(つまり「ウェブサイトのデータをやり取りする約束ごと」)があるんですね。パソコンは、HTTPで「ページをください」って言うと、その下のTCP/IPが「わかりました、確実に届けますね」って処理してくれるわけです。
リクエストからレスポンスまでの細かい流れ
具体的に、あなたがウェブサイトを見るときの流れを説明しますね。
- DNS解決:「example.com」というドメイン名(つまり、わかりやすいサイトの名前)が「203.0.113.1」みたいなIPアドレス(つまり、ネットワークでの住所)に変わります。
- 接続:あなたのパソコンがそのIPアドレスのサーバーに接続しようとします。
- リクエスト送信:接続できたら「GET / HTTP/1.1」みたいなリクエストを送ります。
- レスポンス受取:サーバーが「HTTP/1.1 200 OK」とステータスコード、そしてウェブページのHTML(つまり、ページの内容を書いてるコード)を返します。
- ページ表示:ブラウザがそのHTMLを読んで、あなたが見やすいようにページを表示します。
この全部が、ほんの数秒で起きてるんですよ。すごいですよね。
HTTPのバージョンも進化してる
実は、HTTPにはバージョンがあるんです。「HTTP/1.0」とか「HTTP/1.1」とか「HTTP/2」とか。昔は「HTTP/1.1」が主流でしたが、今は「HTTP/2」や「HTTP/3」も使われてます。
何が違うのかって言うと、データの送り方が工夫されてるんですよ。新しいバージョンほど、より速く、より安全に通信できるようになってるんです。あなたが見てるサイトが速いのも、こういう細かい工夫のおかげなんですね。
HTTPSって何?わかりやすく解説
