初心者必見!「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サーバ)を読者(=クライアント)が見るためのパソコン間のデータのやりとりをするためのものです。
転送できるデータ
送ることができるデータは、
- ハイパーテキスト
- 静止画
- 音声
- 動画 etc..
などさまざまで、てかつまりデータならほぼなんでも送ることができます!
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がリクエストメッセージを構築する
- クライアントがリクエストメッセージを送信する
- サーバがリクエストメッセージを受信する
- リクエストメッセージを解析する
- アプリケーションプログラムへの処理の委託
- レスポンスメッセージを構築する
- レスポンスメッセージを送信する
- クライアントがレスポンスメッセージを受信する
- レスポンスメッセージを解析する
HTTPメッセージ
では、そのリクエストメッセージとレスポンスメッセージにはどのような情報が含まれているのでしょうか。
両メッセージとも構造は、スタートライン・ヘッダ・ボディとなっています。
リクエストメッセージの構造
スタートラインには、メソッド+URI+プロトコルバージョンが記させています。
例えば、
GET https://engineer-traver.hatenablog.com/ HTTP/1.1
といったような感じです。
ヘッダには、データのタイプや文字コーディング方式などを記します。
ボディは補足情報を記し、POST送信時にクエリを添付したりします。
レスポンスメッセージの構造
スタートラインには、プロトコルバージョン+ステータスコード+テキストフレーズが記させています。
例えば、
HTTP/1.1 200 OK
といったような感じです。
ヘッダには、リクエスト同様データのタイプや文字コーディング方式などを記します。
ボディは取得した全データ、つまりHTMLファイルなどが添付されます。
HTTPのバージョン
HTTPは現在ver1.1が主流です。