HTTP とは
HTTP は、 「Hyper Text Transfer Protocol」の略です。 WWW(World Wide Web)上で Web サーバとクライアントが、 HTML(Hyper Text Markup Language = Web ページを記述するための言語)で書かれた文書などの情報をやりとりする時に使われる通信手順(プロトコル)を意味します。 基本的には普通のテキストデータを使い、 ブラウザなどのクライアントが Web サーバに対して get、put といったコマンドを送ると、 それに応じた結果がサーバから送られてきます。 送られてきた結果である HTML、 JPEG といったデータをきれいに成形して見せるのは、 Web ブラウザの仕事になっています。
特徴としては、原則としてステートレス(= stateless 前回の状態は非保持の意)、 つまり 1 回コマンドを送ったら 1 回結果が返ってきてそれで終わり、ということが挙げられます。 利点としては、プログラムがシンプルになることですが、 逆に欠点として複数回のやりとりを追跡できないことにもなります。 このため買い物サイトなどでは、 別途 cookie などの技術を組み合わせて使うことで複数回のやりとりを追跡しています。 また、HTTP ではデータが暗号化されていないため、 通信経路のどこかで内容を知られる可能性があります。 第三者に知られたくない情報をやりとりする時は、別途暗号化を行うか、 暗号化された HTTPS という通信手順を使う必要があります。
HTTP のリクエストとレスポンス
Web ブラウザから Web サーバーに HTTP を使って通信を要求することをHTTP リクエストといいます。
Web サーバ側では要求されたリクエストに応じて処理を行い、レスポンスを返します。
以下では、リクエストで使用する HTTP メソッドとレスポンスで返ってくるステータスコードについて説明します。
HTTP メソッド
HTTP メソッドとは、サーバーに対するリクエストの種類を表すもの。
example.com
に対して、
GET メソッドを使えば、example.com
に対するリソースの取得のリクエスト
DELETE メソッドを使えば、example.com
に対するリソースの削除のリクエスト
となる。
HTTP メソッドを見ればサーバーに対して何の要求をしているか分かります。
HTTP メソッドは全部で下記の8種類がありますが、その中でよく使うのは以下で説明する4種類です。
メソッド | 役割 |
---|---|
GET | リソースの取得 |
POST | 子リソースの作成、リソースへのデータ追加、その他処理 |
PUT | リソースの更新、リソースの作成 |
DELETE | リソースの削除 |
HEAD | リソースのヘッダの取得 |
OPTIONS | リソースがサポートしているメソッドの取得 |
TRACE | プロキシ動作の確認 |
CONNECT | プロキシ動作のトンネル接続への変更 |
GET
情報を取得するメソッド。
Web ページや画像、動画の取得など、もっとも利用頻度の高いメソッドです。
データの参照のみであり、データの更新は行いません。
POST
- リソースの更新、作成
- 他のメソッドで出来ない処理(出来るが POST でやった方が可用性が高い場合)
を担うメソッドです。
最も汎用的なメソッドであるとも言えます。
PUT
リソースの更新または作成を担うメソッド。
body でデータを送信し、既にあれば更新、なければ作成する。
更新または作成を担うメソッドであることから、リクエストに対する結果は不変である。
DELETE
DELETE メソッドは、指定したリソースを削除します。
ステータスコード
HTTP ステータスコードは、HTTP において Web サーバからのレスポンスの意味を表現する 3 桁の数字からなるコードです。
リクエストに対する処理の成功、失敗などを表します。
レスポンスはけ最初の数字で、5 つのクラスに分かれています。
- 100〜199:情報レスポンス
- 200〜299:成功レスポンス
- 300〜399:リダイレクト
- 400〜499:クライアントエラー
- 500〜599:サーバーエラー
よく使うものについては、以下の表に示します。
ステータスコード | 名前 | 概要 |
---|---|---|
200 | OK | リクエストが成功したことを示します。成功が意味することは、 HTTP メソッドにより異なります。 |
301 | Moved Permanently | リクエストされたリソースの URL が永遠に変更されたことを示します。レスポンスで新しい URL が与えられます。 |
400 | Bad Request | 構文が無効であるためサーバーがリクエストを理解できないことを示します。 |
401 | Unauthorized | 意味的にはこのレスポンスは "unauthenticated" (未認証) です。つまり、クライアントはリクエストされたレスポンスを得るためには認証を受けなければなりません。 |
403 | Forbidden | 認証されていないなどの理由でクライアントにコンテンツのアクセス権がなく、サーバーが適切なレスポンスの返信を拒否していることを示します。 401 とは異なり、クライアントの識別子がサーバーに知られています。 |
404 | Not Found | サーバーがリクエストされたリソースを発見できないことを示します。ブラウザーでは、これは URL が解釈できなかったことを意味します。 API では、これは通信先が有効であるものの、リソース自体が存在しないことを意味することがあります。 |
500 | Internal Server Error | サーバー側で処理方法がわからない事態が発生(何らかのエラーが発生)したことを示します。 |
501 | Not Implemented | リクエストメソッドをサーバーが対応しておらず、扱えないことを示します。サーバーが対応しなければならない (従って、このコードを返してはならない) メソッドは GET と HEAD だけです。 |
502 | Bad Gateway | このエラーレスポンスは、リクエストの処理に必要なレスポンスを受け取るゲートウェイとして動作するサーバーが無効なレスポンスを受け取ったことを示します。 |
503 | Service Unavailable | サーバーはリクエストを処理する準備ができていないことを示します。一般的な原因は、サーバーがメンテナンスや過負荷でダウンしていることです。 |
まとめ
この記事では、HTTP について説明しました。
HTTP のリクエストとレスポンス、HTTP メソッド、ステータスコードは WEB の開発で必須になる知識なので、概要についてはしっかり抑えておきましょう。