目次
HTTP(Hypertext Transfer Protocol)
HTTPとは
HTTP(Hypertext Transfer Protocol)とは、Webサイトを表示する際に使用するプロトコルです。
クライアント(利用者のコンピュータ)とWebサーバ間でHTMLなどのテキストで記述されたWebページの送受信で使用されます。
HTTPの通信を開始できるのは、クライアント(利用者のコンピュータ)側のみです。クライアントからHTTP リクエストを送り、WebサーバがクライアントにHTTP レスポンスを返す仕組みです。
上記図は「http://×××.co.jp」のサイトを閲覧する際のHTTPのやり取りです。クライアントはWebブラウザからWebサーバにHTTPリクエストを送信します。そして、Webサーバは「http://×××.co.jp」のサイト内容をクライアントに返却します。
このように、インターネット上にある様々なWebサイトが閲覧できるのは、HTTPというプロトコルが存在しているからです。
HTTPSとは
HTTPによる通信をより安全にしたプロトコルを「HTTPS(HTTP over SSL/TLS)」といいます。
HTTPSは、通信内容が暗号化されていない HTTPとは違い通信内容が暗号化されています。HTTPとHTTPSの違いはWebサイトのURLを見れば判断することができます。
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 GETの動作は次の通りです。
- クライアント:URIを指定
- Webサーバ:指定されたURIのリソースを返却
HTTP POST
HTTP POSTではクライアントからの入力内容をWebサーバに送ることができます。お問い合わせフォームや登録画面などから利用者が入力した内容をWebサーバに送り、Webサーバのデータベースに蓄積する際などに利用します。
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のセキュリティ技術
スポンサーリンク
Basic認証
Basic認証(ベーシック認証)とは、HTTPで定義されてる認証方式の一つで、基本認証とも呼ばれている認証方式です。
Basic認証は実装が容易で、ほぼ全てのWebサーバおよびブラウザで対応していることもあり、簡易的な認証として広く使われています。
ただし、セキュリティ対策は万全ではない為、しっかりとしたセキュリティ対策が必要なシステムでは使用されません。あくまでも簡易的な認証です。
Basic認証の具体的な仕組みは「ログインID」と「ログインパスワード」をBase64と呼ばれるコードにエンコード(変換)して送信します。
暗号化ではなく、Base64にエンコード(変換)しているだけなので、データを盗聴すれば盗聴したデータをBase64でデコード(元に戻す)することで、簡単にログインIDとログインパスワードが分かってしまう欠点があります。
このような理由から、仮に盗聴されても問題にはならないようなシステムで、簡易的な認証として幅広く使用されています。
Digest認証
Digest認証(ダイジェスト認証)とは、HTTPで定義される認証方式の一つです。Basic認証の平文で「ユーザーID」と「パスワード」を送信してしまう欠点を改善した認証方式で、「ユーザーID」と「パスワード」をハッシュ化して送信します。
Digest認証はサーバが生成したランダムの文字列をパスワードに付与し、IDとパスワードをMD5でハッシュ化し送信します。そのため、仮に第三者に盗聴されてもパスワードの解析は困難です。
しかし、Digest認証で使われるMD5は解析することが可能な古いハッシュアルゴリズムのため、しっかりとしたセキュリティ対策が必要なシステムでは使用されません。