人見知りで日本一周、未経験でエンジニアになった人の成長記録

新米学生エンジニアが学んだことを気ままにアウトプットしていくことで誰かのためになったらなー

初心者必見!「Webを支える技術」で学んだHTTPの超基礎

HTTPの基礎

HTTPってなに?http://.....comとかいう感じでURLの前の方についている印象しかないですよね。

ここでWikipediaでHTTPで検索してみると、

Hypertext Transfer Protocolハイパーテキストトランスファープロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。主としてWorld Wide Webにおいて、WebブラウザWebサーバとの間での転送に用いられる。日本標準仕様書ではハイパテキスト転送プロトコルとも呼ばれる。

HTTP/1.1 が RFC 7230 から RFC 7235 で規定されている。かつては RFC 2616 が HTTP/1.1 を規定していたため、こちらもよく参照されている。また、HTTP/2が RFC 7540 で規定されている。

って感じて正直専門用語が多くて難しいっすね。。。

HTTPとは

もっと噛み砕いて言うと、HTTPとは「Webサーバクライアントがデータをやり取りする通信手段」のことを意味しています。

例えると、はてなブログ(=Webサーバ)を読者(=クライアント)が見るためのパソコン間のデータのやりとりをするためのものです。

転送できるデータ

送ることができるデータは、

などさまざまで、てかつまりデータならほぼなんでも送ることができます!

HTTPの特徴

RESTという概念に準じでつくられたというのが特徴です。

RESTとは、

Representational State Transfer - Wikipedia

Representational State Transfer (REST) は、ウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつである。この語は2000年に、HTTPプロトコル規格の主要著者の一人であるen:Roy Fieldingが、ウェブについて書いた博士論文で初めて現れ、ネットワーキングコミュニティの中ですぐに広く使われることになった。

RESTは、初めはアーキテクチャの原則と制約の集まり(後述)を指していたが、次第に、XMLやHTTPを使った簡易なウェブベースのインタフェースのうち、WebサービスSOAPプロトコルのようなMEP(Message Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語として使われるようになった。

といったようにような小難しいけどめちゃめちゃ大切なアーキテクチャスタイルです。これについてはまた別記事で詳しく説明しますが、簡単に大切なキーワードだけ示しておきます。

  • 統一インターフェイス
  • ステートレス性
  • キャッシュ
  • クライアント・サーバ
  • 階層化システム
  • コードオンデマンド

HTTPとは

リクエストとレスポンス

クライアントとサーバの間での通信にはこのような流れがあります。

  1. HTTPがリクエストメッセージを構築する
  2. クライアントがリクエストメッセージを送信する
  3. サーバがリクエストメッセージを受信する
  4. リクエストメッセージを解析する
  5. アプリケーションプログラムへの処理の委託
  6. レスポンスメッセージを構築する
  7. レスポンスメッセージを送信する
  8. クライアントがレスポンスメッセージを受信する
  9. レスポンスメッセージを解析する

リクエストとレスポンス

HTTPメッセージ

では、そのリクエストメッセージとレスポンスメッセージにはどのような情報が含まれているのでしょうか。

両メッセージとも構造は、スタートライン・ヘッダ・ボディとなっています。

リクエストメッセージの構造

スタートラインには、メソッド+URI+プロトコルバージョンが記させています。

例えば、

GET https://engineer-traver.hatenablog.com/ HTTP/1.1

といったような感じです。

ヘッダには、データのタイプや文字コーディング方式などを記します。

ボディは補足情報を記し、POST送信時にクエリを添付したりします。

レスポンスメッセージの構造

スタートラインには、プロトコルバージョン+ステータスコード+テキストフレーズが記させています。

例えば、

HTTP/1.1 200 OK

といったような感じです。

ヘッダには、リクエスト同様データのタイプや文字コーディング方式などを記します。

ボディは取得した全データ、つまりHTMLファイルなどが添付されます。

HTTPメッセージ

HTTPのバージョン

HTTPは現在ver1.1が主流です。

HTTPのバージョン1

HTTPのバージョン2

TCP/IPとは

TCPIPとは

HTTPのステートレス性

HTTPステートレス性