HTTPの基本の基本1
HTTPについて
HTTPとは
HTTP(HyperText Transfer Protocol)は、TCP/IPベースのプロトコルです。
クライアント(Webブラウザ)とサーバ間でWeb上のリソースをやりとりします。
最新のバージョンは1.1でほとんどのHTTPクライアントライブラリやWebサーバはHTTP1.1をサポートしています。
クライアントとサーバ
クライアント(Webブラウザ)がサーバ(Webサーバ)に接続し、各種のリクエストを出してレスポンスを受け取ります。
ハイパーテキストの転送用プロトコルのため、基本的にはテキストデータをやりとりしますが、Webで扱うデータは全て送ることが可能です。
クライアントが出したリクエストをサーバで処理してレスポンスを返す、このようなプロトコルのことをリクエスト/レスポンス型のプロトコルと言います。
HTTPメッセージ
例えば、ブラウザでWebページを開く際に、クライアントは以下のようなメッセージをサーバーに送信しています。
GET / HTTP/1.1 #GETはメソッド、/はリクエストURI、HTTP/1.1は HTTPのバージョンです。
これはクライアントによるリクエストメッセージのうち、1行目にあるリクエストラインと呼ばれるものです。
クラインアントによるメッセージとWebサーバによるメッセージを合わせてHTTPメッセージと呼びます。
HTTPメッセージ
HTTPメッセージの構成要素は以下の4つです。
- スタートライン(1行目)
- リクエストライン
- ステータスライン
- ヘッダ
- 空行(ヘッダの終了は空行で判断します)
- ヘッダ
リクエストメッセージ
GET /test HTTP/1.1 #リクエストライン(メソッド、リクエストURI、プロトコルバージョン) Host: abc.jp #Hostヘッダ(必須)
ヘッダは、基本的に「名前:値」という構成です。
仮想ホスト
HTTP/1.1では仮想ホストがサポートされています。
仮想ホストとは、1台のサーバーで複数のドメインを運用する技術のことです。
HTTP/1.1 のクライアントはリクエストメッセージの ヘッダ内で必ずホスト名を指定する必要があります。
サーバーはこのホスト名を元に対応したコンテンツを送信します。
GET / HTTP/1.1 Host: www.abc.com
メソッドについて
HTTP 1.1は以下の8種類をサポートしています。
名称 | 説明 |
---|---|
GET | 最も一般的に使用されるメソッドです。ブラウザはサーバに対してページ(リソース)の取得を要求します。 |
HEAD | ヘッダ(メタデータ)のみの情報を要求します。 |
POST | CGI でよく使用されるメソッドです。method="POST" を指定したフォームに入力したデータをサーバに転送する際に使用されます。 |
PUT | ページ(リソース)の更新、ページの作成、ファイルをサーバにアップロードする際になどに用います。 |
DELETE | 指定したリソースを削除することをサーバに要求します。 |
OPTIONS | サーバがサポートするメソッドの調査し、取得します。 |
CONNECT | プロキシ動作のトンネル接続への変更(プロキシサーバを経由して SSL 通信する際などに使用します。) |
TRACE | 自分宛にリクエストメッセージを返す(ループバック)試験 |
- GET メソッドと HEAD メソッドについては、サーバーは必ずサポートしなければなりません。
レスポンスメッセージ
HTTP/1.1 200 OK #ステータスライン(プロトコルバージョン、ステータスコード、補足メッセージ(テキストフレーズ))
ステータスコードについては、
- 1xx: 通信エラー、処理中
- 2xx: 正常終了
- 3xx: リダイレクト
- 4xx: クライアントエラー
- 5xx: サーバエラー
200番が表示されたら、成功ですね。
ステータスコードは先頭の数字で分類されているため、クライアントはとりあえず先頭の数字によってサーバがどのようなレスポンスを返してきたのかを理解できます。
補足メッセージには、OK や Bad Request、Not Found など、ステータス番号の意味や詳細を補足するメッセージが返信されます。
telnetとは
telnetはざっくり言うと、外部のコンピューターにアクセスするコマンドです。
webサーバーとhttpプロトコルでやりとりする場合、以下のコマンドで実行できます。
$telnet サーバ名 80 #ポート番号は80番です。
後は、リクエストメッセージを送るだけです。
最後に
以上です!