何気なく、ブラウザに、https://example.com と入力するとサイトの内容が表示されますが、
どういう仕組みでできているのか、説明するのは意外と難しいものです。
その仕組みを手を動かして体験するのが、この記事の目的です。
HTTP通信してみる
ブラウザで隠蔽化されているHTTPの仕組みをコマンドラインを使って体験していきます。
telnetコマンドを使って、HTTP通信をしてみます。(※https://のサイトには使えません)
入ってない場合は、brew install telnet
で入れてください。
まず、ドメイン名 + ポート番号を指定して通信開始します。電話で例えると、相手の電話番号を入力して通話ボタンを押した状態です。
telnet www.example.com 80
次のような文字が表示されます。相手が受話器を取った状態です。
Trying 93.184.216.34...
Connected to www.example.com.
Escape character is '^]'.
次のように入力してください。
電話で例えると、用件(GET
)、日本語で(HTTP/1.1
)、〇〇さん(HOST: www.example.com
)という内容を伝えています。
何語で、〇〇さんに、どんな要件があるというのをコンピューター的に書くと次のようになり、これをリクエストヘッダーと言います。
GET / HTTP/1.1
HOST: www.example.com
そして、Enterを2回押すと、次のように表示されます。
電話で例えると、質問に対する回答です。
HTTP/1.1 200 OK
Age: 470364
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 09 May 2021 03:44:33 GMT
Etag: "3147526947+ident"
Expires: Sun, 16 May 2021 03:44:33 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (oxr/8310)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
<!doctype html>
<html>
<head>
<title>Example Domain</title>
~~ 中略 ~~
</body>
</html>
1行目は、
電話で例えると日本語(HTTP/1.1
)、回答できるよ(200 ok
) という内容です。
HTTP/1.1 200 OK
2行目からは、回答した時刻(Date)など、回答の文字数(Content-Length)などが書いてあります。
Age: 470364
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 09 May 2021 03:44:33 GMT
Etag: "3147526947+ident"
Expires: Sun, 16 May 2021 03:44:33 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (oxr/8310)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
1行改行して、回答内容(HTML)が書いてあります。
<!doctype html>
<html>
<head>
<title>Example Domain</title>
~~ 中略 ~~
</body>
</html>
ブラウザのリクエストヘッダーを見る
次に、ブラウザが送信しているリクエストヘッダーを見てみる(GoogleChromeでは、開発者ツール > Network)と、telnet
で送信したリクエストヘッダー以外にも多くの情報を送信していることが分かります。
例えば、User-Agent
を使って、PCかモバイルを検出して別の情報を返すこともできます。
まとめ
Webブラウザ(電話をかける人)と、Webサーバー(電話を受ける人)は、このような、取り決めに従って通信しています。この取り決めを HTTP(Hyper Text Transfer Protocol)と言います。