HTTPを理解する
HTTPとは
HTTPは、 「Hyper Text Transfer Protocol」の略です。 今やインターネットの代名詞となったWWW(World Wide Web)上でWebサーバとクライアントが、 HTML(Hyper Text Markup Language = Webページを記述するための言語)で書かれた文書などの情報をやりとりする時に使われる通信手順(プロトコル)を意味します。
と書かれています。
はい?????
もう言葉一つ一つがキャパオーバー。
一個一個分解していきましょう。
・www World Wide Web - Wikipedia ≒ インターネット
・webサーバー ≒ 自分のコンピューターとは別に動いてるコンピューター
今見てるページも何もナシに表示してるわけじゃなくて何か表示するための入れ物がある。文字を書くなら紙だったり書いた文字を表示する物が必要。情報通信をするときに通信した情報を表示するための媒体となる物とシステムがwebサーバー
・クライアント ≒ 自分
普段自分たちが見ているウェブページとかも、どっかの誰かが用意したコンピューターに〇〇見たいから表示して!って連絡して、その連絡がつくことで表示できてるんですね。
その連絡をする時にルールとかが無いと誰がどこに何の連絡したかがぐちゃぐちゃになるしわからんくなるってことで、そのルールを決めた。
そのルールがHTTP
で!今まで勉強してたことはそのルールね!
ではではどんなルールがあるのかな?ってことで
こちらを見たところ急にレベルがぶち上がってるじゃありませんか!!
また拒否反応が、、、
一個一個ゆっくり見ていきましょう。
HTTPのサンプル
ブラウザで Webページを開く際、ブラウザはサーバに下記のような要求メッセージを送信します。
HTTPGET / HTTP/1.1 Accept: image/gif, image/jpeg, */* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;) Host: www.xxx.zzz Connection: Keep-Aliveこれに対してサーバは下記のような応答メッセージを返します。
HTTPHTTP/1.1 200 OK Date: Sun, 11 Jan 2004 16:06:23 GMT Server: Apache/1.3.22 (Unix) (Red-Hat/Linux) Last-Modified: Sun, 07 Dec 2003 12:34:18 GMT ETag: "1dba6-131b-3fd31e4a" Accept-Ranges: bytes Content-Length: 4891 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html <!DOCTYPE html> <html> : </html>
急にこんな文字書かれても困る!!
冷静にゆっくり見ていきましょう。
普段自分たちが使っているグーグルクロームとかsafariなどのブラウザでは見えませんが、ちゃんと中ではこんなやり取りがされているんだそうな。
ホントに!?ほんと?とりあえずそうなんでしょう。
要求メッセージというのがこれ見たいんよ情報頂戴!ってクライアント側が送ってる方の書き方で、
応答メッセージというのが「あんたが見たいのこれでしょ!」って返してくれてる書き方。
役所でも住民票見たい時色々書かないといけないし住民票は色んな情報が入ってる紙で渡されるし、、、たぶんそんな感じ。これ伝わるのか!?
で送る側の一番のポイントその1
リクエスト行
チョッチョチョット待ってこれブラウザは何も意識してなくても送ってくれてるけど手動でやる時どうするの!??ってことで
今回学習で使われたのが、telnet
telnetとは
Telnet(テルネット Teletype network)とは、IPネットワークにおいて、遠隔地にあるサーバやルーター等を端末から操作する通信プロトコル、またはそのプロトコルを利用するソフトウェアである。
はい〜何でもかんでもプロトコル。
簡単にいうと遠隔操作するためのソフトウェアとその決まりごと。
なんで遠隔操作??そうさっき
普段自分たちが見ているウェブページとかも、どっかの誰かが用意したコンピューターに〇〇見たいから表示して!って連絡して
って書いたようにどっかの誰かが用意したコンピューターを操作して表示して!って言わないといけないから。これが遠隔操作する事になるそう。
今は盗聴とか脅威からsshという守りが強いやり方でやってるのが主流。
今回は基礎の勉強ということでこちらを使用。
ではtelnetというソフトウェアをどうやってつかうの?
telnetコマンドをターミナルで使うんです!
ってことで早速使ってみましたがcommand not found。。。
mac os High Sierra 以降はhome brewでインストールしてね!ってことなので
M1 のbrew関係で詰まればまた色々設定がbrewを入れるところからやり直さないといけませんでしたが自分の場合は環境構築は一通り網羅してたのささっと導入。
じゃあさっそくtelnet!
やりかたは
telnet 〇〇(ここにドメイン名かIPアドレス) ポート番号(今回は80)
※なぜ80かはHTTPを使って通信をするから。
ポート番号については珍しくwikipediaがわかりやすかった。
ポート (コンピュータネットワーク) - Wikipedia
ドメイン名については
分かりやすいURL構造を設計しよう「ディレクトリ名・ファイル名の付け方」 : ビジネスとIT活用に役立つ情報
こちらを参照。わかりやすかったです。
でやっと接続するサーバーに情報頂戴!って伝える一歩手前まで来ました。
じゃあここから何をするかって言うと、HTTPのルールに従ってリクエストを送るわけですよ。
メソッド パス名 HTTP/バージョン
これを使って
今回はまず普通に
GET パス名 HTTP/1.1 と入力。
その次に必須なのが、
◆ Host (要求)
HTTP/1.1 で唯一の必須ヘッダです。ブラウザからサーバに対して、サーバ名を送信します。サーバが名前ベースの仮想ホストをサポートしている場合、この名前を手がかりにどのサーバとして振舞うか決定されます。例えば、http://aaa.sample.dom/ と http://bbb.sample.dom/ は実は同じサーバ(IPアドレス:61.206.47.206)ですが、Host ヘッダでホスト名を指定することにより、仮想的に 2つのサーバとして振舞うことが可能になります。
Host: aaa.sample.dom
こいつが必要とのこと。
これで通信リクエストが成立!!
でサーバーから、はいっこの情報どぞ!ってくるのが応答メッセージ
その中に含まれているのが皆さんおなじみのHTMLの書き方達。
やっと馴染みあるものが表示されたよ。。
こんな感じにHTTPの通信の流れは
要求メッセージ
(〇〇が欲しいんだよ。例:日本語で!jepegで!そっちにデータ保存するために
メソッドPOSTで、保存したい文字はこれで、文字は全部で何bytesだからよろしく、とかとか)を送っていく。
それを受けたサーバー(ウェブページを表示させるコンピューター)が
応答メッセージを送り返してくれる。
という感じになっている。
ちなみにPOSTメソッド使うときは
ここの説明を参考にしました。
ブラウザはこれを自動で簡単にやってくれてるんですねーありがたや。
要求メッセージと応答メッセージについて
何が必要で、どんな時に何を書くのかはまた今度。
見直したら文字サイズとか日本語とかぐちゃぐちゃだけど、とりあえずアウトプット出来たから良しってことで。