Webとデザインのあれこれ

プログラミングとUIデザインの学習記録です。

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メッセージ

  • リクエストメッセージ(クライアントによるリクエスト)
  • レスポンスメッセージ(Webサーバによる応答)

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番です。

後は、リクエストメッセージを送るだけです。

最後に

以上です!

参考資料

www.tohoho-web.com

developer.mozilla.org

ash.jp

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)