ネットワーク

HTTPとは

2020年3月12日

HTTP(Hypertext Transfer Protocol)

HTTPとは

HTTP(Hypertext Transfer Protocol)とは、Webサイトを表示する際に使用するプロトコルです。

クライアント(利用者のコンピュータ)とWebサーバ間でHTMLなどのテキストで記述されたWebページの送受信で使用されます。

HTTPの通信を開始できるのは、クライアント(利用者のコンピュータ)側のみです。クライアントからHTTP リクエストを送り、WebサーバがクライアントにHTTP レスポンスを返す仕組みです。

HTTPイメージ図

上記図は「http://×××.co.jp」のサイトを閲覧する際のHTTPのやり取りです。クライアントはWebブラウザからWebサーバにHTTPリクエストを送信します。そして、Webサーバは「http://×××.co.jp」のサイト内容をクライアントに返却します。

このように、インターネット上にある様々なWebサイトが閲覧できるのは、HTTPというプロトコルが存在しているからです。

HTTPが使用するポートはデフォルト「80」、また トランスポート層では TCPを使用します。

HTTPSとは

HTTPによる通信をより安全にしたプロトコルを「HTTPS(HTTP over SSL/TLS)」といいます。

HTTPSは、通信内容が暗号化されていない HTTPとは違い通信内容が暗号化されています。HTTPとHTTPSの違いはWebサイトのURLを見れば判断することができます。

httpsで始まるサイト

HTTPのサイトは、サイトのURLが「http://~」 、HTTPSのサイトはサイトのURLが「https://~」からはじまっています。

関連記事

HTTPのバージョン

HTTPには次のバージョンが存在します。

バージョン 説明
HTTP/0.9 1991年に作られた最初のバージョン。メソッドはメソッドは GETのみ存在。
HTTP/1.0 1996年に作られたバージョン。メソッドに POST など GET 以外のものが増え、レスポンスはヘッダーがつくように。またステータスコードを含めるようになった。
HTTP/1.1 1997年に初版が作られ、その後、2回改訂。1.0の問題点を解消したバージョン。
HTTP/2 2015年に作られたバージョン。HTTP/1.1が規定されて以来16年ぶりのバージョンアップ。1.1と比べ高速な通信を可能としている。
HTTP/3 2018年に作られた最新バージョン。

HTTPのメソッド

スポンサーリンク

HTTP GET

指定されたURIのリソース(Webサイトの内容など)を取り出す、「HTTP/0.9」のバージョンから存在するHTTPの基本メソッドです。

HTTPイメージ図

HTTP GETの動作は次の通りです。

  • クライアント:URIを指定
  • Webサーバ:指定されたURIのリソースを返却

HTTP POST

HTTP POSTではクライアントからの入力内容をWebサーバに送ることができます。お問い合わせフォームや登録画面などから利用者が入力した内容をWebサーバに送り、Webサーバのデータベースに蓄積する際などに利用します。

HTTP POSTイメージ図

HTTP POSTの動作は次の通りです。

  • クライアント:入力内容をWebサーバに送る
  • Webサーバ:クライアントからの入力内容を受け取り、GETと同じようにクライアントへリソース(結果を表示する画面の内容など)を返却する。

その他のメソッド

HTTP GET そして POST以外のHTTPのメソッドは次の通りです。

HTTPのメソッド名 説明
PUT 指定したURIにリソース(画像など)を保存。もしURIにリソースが存在しない場合は、WebサーバはそのURIにリソースを作成する。
DELETE 指定したURIのリソースを削除する。
OPTIONS Webサーバがサポートしているバージョンなどを調査する。
HEAD HTTPのヘッダ情報を取得する。
TRACE Webサーバまでの経路情報を取得する。
CONNECT プロキシサーバを経由する際に使用する。

HTTPのヘッダフィールド

HTTPリクエストヘッダ

HTTP/1.1で利用される主なリクエストヘッダは次の通りです。

ヘッダ 説明
Accept レスポンスで受入可能なメディアタイプ(MIME)
Accept-Charset レスポンスで受入可能な文字セット
Accept-Encoding レスポンスで受入可能な文字エンコーディング
Accept-Language レスポンスで受入可能な言語
Authorization 認証情報
Expect リクエストを正しく扱うためにWebサーバーに期待している要求
From 利用者のメールアドレス
Host リクエスト先のサーバ名
If-Match 条件が真の場合のみリクエストを処理するようサーバに要求
If-None-Match If-Matchの逆で条件が真でない場合のみリクエストを処理するようにサーバに要求
If-Range 条件が真の場合のみ指定したオブジェクトの範囲を返すようサーバに要求
If-Modified-Since 指定日時以降にオブジェクトが変更されている場合のみリクエストを処理するよう要求
If-Unmodified-Since If-Modified-Sinceの逆で真でないときのみ実行
Max-Forwards リクエストの中間システムを経路する最大数
Proxy-Authorization プロキシサーバとの認証情報
Range 全体でなくリソースの一部を要求
Referer リクエストの出所。どこからWebサーバに訪問したのかを表す情報
TE レスポンスで受入可能なエンコーディング形式
User-Agent リクエストのユーザエージェント(Webブラウザの情報)

スポンサーリンク

HTTPレスポンスヘッダ

HTTP/1.1で利用される主なレスポンスヘッダは次の通りです。

ヘッダ 説明
Accept-Ranges Range 要求において使用可能な単位
Age プロキシーのキャッシュに入ってからの経過時間
ETag エンティティとそのバージョンを一意に識別する識別子
Location リダイレクト先のURL
Proxy-Authenticate プロキシサーバとクライアント間の認証情報
Retry-After リクエストの再試行をいつ実行するかを表す情報
Server サーバのベンダー名、バージョン番号を示す
Vary キャッシュを分ける必要があることを伝える
WWW-Authenticate クライアントに対してリクエストの再発行を要求

その他のヘッダ情報

HTTP/1.1で利用されるその他の主なヘッダ情報は次の通りです。

ヘッダ 説明
Cache-Control キャシュを制御するための情報
Connection 接続永続性情報
Date 作成された日付
Pragma メッセージに関する追加情報
Trailer メッセージボディの後に記述されているヘッダフィールド
Transfer-Encoding ボディ部分のエンコーディング方式
Upgrade 通信相手に別のプロトコルにアップデートするように要求する
Via メッセージの転送経路を示す
Warning メッセージに関する追加情報(警告)
Allow サポートするHTTPメソッドを示す
Content-Encoding コンテンツのエンコード方式を示す
Content-Language コンテンツの言語を示す
Content-Length コンテンツの長さをバイト単位で示す
Content-Location コンテンツを識別するURL
Content-MD5 コンテンツに関するメッセージ状態チェック
Content-Range コンテンツの範囲を示す
Content-Type コンテンツのタイプを示す
Expires 有効期限の日時を示す
Last-Modified 最後に変更された日時を示す

HTTPステータスコード

HTTPのステータスコードとは、リクエストに対する処理結果を示すコードです。ステータスコードは3桁の数字で表し次のような分類に分けられています。

  • 100番台:情報(Informational)
  • 200番台:正常(Success)
  • 300番台:リダイレクション(Redirection)
  • 400番台:クライアントエラー(Client Error)
  • 500番台:サーバーエラー(Server Error)
HTTPステータスコードの詳細は、以下の記事をご覧ください。

HTTPのセキュリティ技術

スポンサーリンク

Basic認証

Basic認証(ベーシック認証)とは、HTTPで定義されてる認証方式の一つで、基本認証とも呼ばれている認証方式です。

Basic認証は実装が容易で、ほぼ全てのWebサーバおよびブラウザで対応していることもあり、簡易的な認証として広く使われています。

ただし、セキュリティ対策は万全ではない為、しっかりとしたセキュリティ対策が必要なシステムでは使用されません。あくまでも簡易的な認証です。

Basic認証とは

Basic認証の具体的な仕組みは「ログインID」と「ログインパスワード」をBase64と呼ばれるコードにエンコード(変換)して送信します。

暗号化ではなく、Base64にエンコード(変換)しているだけなので、データを盗聴すれば盗聴したデータをBase64でデコード(元に戻す)することで、簡単にログインIDとログインパスワードが分かってしまう欠点があります。

このような理由から、仮に盗聴されても問題にはならないようなシステムで、簡易的な認証として幅広く使用されています。

Digest認証

Digest認証(ダイジェスト認証)とは、HTTPで定義される認証方式の一つです。Basic認証の平文で「ユーザーID」と「パスワード」を送信してしまう欠点を改善した認証方式で、「ユーザーID」と「パスワード」をハッシュ化して送信します。

Digest認証とは

Digest認証はサーバが生成したランダムの文字列をパスワードに付与し、IDとパスワードをMD5でハッシュ化し送信します。そのため、仮に第三者に盗聴されてもパスワードの解析は困難です。

しかし、Digest認証で使われるMD5は解析することが可能な古いハッシュアルゴリズムのため、しっかりとしたセキュリティ対策が必要なシステムでは使用されません。

一般的なWebアプリケーションは HTTPS(HTTP over SSL/TLS)で通信内容を暗号化し、認証にはForm認証を使うケースが多いです。

helpful