エンジニアを目指す方、エンジニア初心者の方は、HTTPについてどれだけ知っていますでしょうか。
エンジニアであれば知っておきたい基本知識はいくつかありますが、その中の1つがHTTPだと僕は考えています。
特にWebアプリケーションを開発、構築、運用するエンジニアにおいては、必須知識と言えると思います。
本記事では、HTTPの基本知識について解説します。
HTTPは奥が深く、重要なことがたくさんあるのですが、まずは基本となる部分についてまとめます。
なお、記事の内容は、主に以下の書籍を参考とさせていただいています。
プロトコルとは何か
HTTPは「Hyper Text Transfer Protocol」の頭文字をとったプロトコルの1つです。
プロトコルとは何かを簡単に説明すると、日本語では「規約」とか「手順」と表現され、通信の手順として、自分と通信相手がどんな順番や内容で話を進めていくのか、お互いがコミュニケーションを取るための決まりごとのようなものです。
例えば、自分が通信相手に「今日の天気は?」と聞いたのに、相手が「1月1日です」と内容を無視した答えを返してきたら困りますし、「Fine.」とこちらが理解できない言語で返されても困ります。
HTTPはWebにおけるプロトコルは、テキストや画像、音声など様々なデータを通信するための規約や手順となります。
HTTPの基本
HTTPは、リクエストとレスポンスの2種類に大別されます。
コミュニケーションで言えば、リクエストは相手に話しかける(問いかける)方を表し、レスポンスはリクエストの内容を受取って返答する方を表します。
通常、リクエスト側をクライアント、レスポンス側をサーバと呼びます。
リクエストメッセージの基本構造
リクエストメッセージの基本構造は以下のとおりです。
リクエストライン リクエストヘッダ (空行) リクエストボディ
例えば以下のような形となります。(リクエストボディはなし)
GET /test HTTP1.1 Host: example.jp
1行目はリクエストラインです。メソッド、リクエスト、プロトコルバージョンで構成されます。
2行目から空行までがリクエストヘッダです。メッセージのメタデータとして、リクエストボディの内容を表す情報などがあります。
例えば自分が話せる言語などの情報を相手に渡し、返してほしい言語が何なのかを伝えます。
空行から最終行までがメッセージボディです。相手に伝えたいメッセージの部分になります。
レスポンスメッセージの基本構造
レスポンスメッセージの基本構造は以下のとおりです。
レスポンスライン レスポンスヘッダ (空行) レスポンスボディ
例えば以下のような形となります。
HTTP/1.1 200 OK Content-Type: application/xhtml+xml; charset=utf-8 <html xmlns="http://www.w3.org/1999/xhtml"> ... </html>
1行目はレスポンスラインです。プロトコルバージョン、ステータスコード、テキストフレーズで構成されます。
2行目から空行まではレスポンスヘッダです。メッセージのメタデータとして、レスポンスボディの内容を表す情報などがあります。
例えばどんな形式、文書の種類のレスポンスボディなのかを相手に伝えます。
空行から最終行までがレスポンスボディです。相手に伝えたいメッセージの部分になります。
HTTPメソッド
リクエストラインに指定できるHTTPメソッドは以下の8種類です。
メソッド | 意味 |
---|---|
GET | リソースの取得 |
POST | 子リソースの作成、リソースへのデータの追加、そのほかの処理 |
PUT | リソースの更新、リソースの作成 |
DELETE | リソースの削除 |
HEAD | リソースのヘッダ(メタデータ)の取得 |
OPTIONS | リソースがサポートしているメソッドの取得 |
TRACE | プロキシ動作の確認 |
CONNECT | プロキシ動作のトンネル接続への変更 |
一番良く使われるのはGETです。通常Webサイトを閲覧する際に使われます。
何かの申込みなどを行う際に、情報を入力する場合に使われるのがPOSTやPUTです。
後半の方は、ほとんど使う機会はないかもしれません。
HTTPステータスコード
レスポンスラインのステータスコードは、先頭の数字によって5つに分類されます。
ステータスコード | 意味 | 説明 |
---|---|---|
1xx | 処理中 | 処理が継続していることを示す。クライアントはそのままリクエストを継続するか、サーバの指示に従ってプロトコルをアップデートして再送信する。 |
2xx | 成功 | リクエストが成功したことを示す。 |
3xx | リダイレクト | ほかのリソースへのリダイレクトを示す。クライアントはこのステータスコードを受け取ったとき、レスポンスメッセージのLocationヘッダを見て新しいリソースへ接続する。 |
4xx | クライアントエラー | クライアントエラーを示す。原因はクライアントのリクエストにある。エラーを解消しない限り正常な結果が得られないので、同じリクエストをそのまま再送信することはできない。 |
5xx | サーバエラー | サーバエラーを示す。原因はサーバ側にある。サーバ側の原因が解決すれば、同一のリクエストを再送信して正常な結果が得られる可能性がある。 |
Webサイトの閲覧時に、リンク先のページが存在しないと、「404 Not Found」というメッセージが表示されることがあります。
この404は、指定したURLに対応するリソースが存在しないという意味のステータスコードが返されたことを表しています。
また、人気商品の購入時や、テレビ等で紹介されてアクセスが集中した際に、「503 Service Unavaliable」というメッセージが表示されることがあります。
この503は、サーバが何らかの理由(アクセス過多など)により、一時的にアクセスできない状態であるという意味のステータスコードが返されたことを表しています。
HTTPはエンジニアの必須知識
現代において、ほとんどの方が知らずとも使っているプロトコルがHTTPです。
普段利用する際にはあまり意識することはないかもしれませんが、エンジニアとして開発、構築、運用する際には理解しておく必要があります。
今回紹介した内容は、HTTP全体のごく一部です。
詳細まできちんと知りたい場合には、RFC2616を始めとした関連するRFCを確認していくことになります。
ただ、最初からRFCを読み進めていくのはツライと思いますので、今回参考にさせていただいた書籍「Webを支える技術 -HTTP、URI、HTML、そしてREST」は、RFCの内容も含めて、わかりやすくまとめられた本ですので、HTTPやWebを理解するためにおすすめしたい1冊です。
今回は、エンジニアの必須知識としてHTTPについて紹介しました。
参考になれば幸いです。
コメント