どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

【FJORD】HTTPの基本

本日はHTTPの基本をやります!
目次

1.HTTPとは

HTTPは HyperText Transfer Protocol の略ですよ、と言ったところで、プロトコルとは…?ってなりますね😆笑
sshの記事にも少しだけ出てきましたので、ちょっと脱線しますが、プロトコルの説明をします。
IT用語としてのプロトコルとは、通信をする際の約束事項のことだそうです。
データをやりとりする手順を決めることで、異なるコンピューター同士でも正しく通信ができるようになっているそうです。
IT用語でなくても、英単語として「(外交との)儀礼、条約原案、協定」などといった意味があるそうです。
ここまでくると HyperText Transfer Protocol がなんとなく分かってきました😊
HTTPとは、Webのサーバーとクライアント(ブラウザ)の間で通信をする時の取り決めです。
sshと違って、通信は暗号化されません!
HTTP接続は、例えば以下のような感じになります。
f:id:mistyrinth:20181023211226p:plain
このやりとりの構成は以下のようになっています。ヘッダとメッセージボディの間には1行の空欄があります。
f:id:mistyrinth:20181023211256p:plain

2.ポート

ウェルノウンポートについては先程も出てきたsshの記事でも少し触れています。
sshでは初期設定がポート22でしたが、HTTPはポート80です。
注意点は、同じWebページに見えても、httpはポート80でhttpsはポート443です。
今回はhttp://から始まるページに対して、ポート80で接続します💻
なお、https://から始まるページに対してポート80を指定するなど、ポートを間違えて接続しようとすると、Connection closed by foreign host.というメッセージが出てきて接続が切れます😖

3.telnetでHTTPに接続

3-1. telnetインストール

実際のHTTPの通信を見てみるために、telnetという通信プロトコルを使ってみます。
まずtelnetをインストールします!(Linuxでもいいのですが、今回はmacにインストールしています)
既にHomebrewをインストールしているので、brew install telnetでインストールできます😆

3-2. HTTP接続

インストールしたtelnetを使ってHTTP接続をしてみます。
telnetを実行すると、telnetを起動することができます💡
f:id:mistyrinth:20181025095236p:plain
コマンドを入力する行の先頭部分がtelnet>に変わりましたね!
今回使うhttp://から始まるページはhttp://example.comにします。
open [ホスト名] [ポート番号]で接続ができます🙂
今回の場合はopen http://example.com 80ですね🖊
f:id:mistyrinth:20181025080932p:plain
ここまでtelnetopen [ホスト名] [ポート番号]としてきましたが、これを1行にまとめてtelnet [ホスト名] [ポート番号]でもOKです👌
ここから、先程図で示したクライアントとサーバーのやりとりが開始します!!
方法のひとつとして、GETメソッドをご紹介いたします。

3-3. GETメソッド

GETメソッドはクライアントがサーバーから情報を取得する時に使います。
まず最初はクライアント側からです。
f:id:mistyrinth:20181025084348p:plain
これを入力するには、リクエスト行(1行目)をGET / HTTP/1.1として、ヘッダ(2行目以降)にHost: [ホスト名]とします。
GETメソッドにはメッセージボディ(補足事項のところ)はいらないので、最後に空欄行を1行入れたら終了です。
するとサーバー側から返事が返ってきます!✨
f:id:mistyrinth:20181025084822p:plain
これを図にすると以下のような感じです。
f:id:mistyrinth:20181025090713p:plain
ちなみに、GETのあとの/はトップページを指しているので、トップページより下層のページに接続する際は、URLのドメイン名以降を/に続けて書くと指定したページに接続できます💪
例えばURLがhttp://domain.com/contentsだったら、リクエスト行はGET /contents HTTP/1.1、ヘッダはHost: domain.comになります。

本日は以上です!