HTTP・HTTPS

HTTP・HTTPS

HTTP、HTTPSプロトコルについてを述べる。

HTTPプロトコル #

HTTP(Hyper Text Transfer Protocol)とは、WebサーバとクライアントのWebブラウザ間でHTML文書などのテキストメッセージを受け渡すためのプロトコルである。

HTTPの通信は、クライアントからサーバへのHTTPリクエストと、サーバからクライアントへのHTTPレスポンスの2つに分けられる。

HTTPSプロトコル #

HTTPSプロトコルは、大まかにいうとセキュリティを確保した通信路上でHTTP通信を行うプロトコルである。

HTTP通信を行う前に、セキュリティの確保として、データを暗号化して送受信するプロトコルであるSSLプロトコル(またはTLSプロトコル)を利用しセッションを確定する。その後に、HTTPセッションの接続を行う。

HTTPのメッセージ構造 #

HTTPのメッセージは大きく開始行、ヘッダフィールド、CRLFの改行、メッセージボディの4つに分けられる。

  • 開始行 (リクエストライン/ステータスライン)
  • ヘッダフィールド(0行以上、以下から構成)
  • General-header
  • Request-header
  • Response-header
  • Entity-header
  • 改行(CRLF)
  • メッセージボディ

HTTPの開始行(リクエストメッセージ) #

HTTPメッセージの一番最初に書く開始行は以下のような構造になる。

メソッド  /任意のパス(+クエリストリング)  HTTP/1.1

クエリストリングとはリクエストと同時に送るデータのことで、任意のパスの後に"?“を書き、その後にデータを記入する。

また、メソッドとは以下のいずれかである。

メソッド名 説明
GET 指定したURL(URI)で識別されるリソースを取得
POST 指定したURL(URI)で識別されるリソースの子リソースの作成、またはリソースへのデータの追加などを要求
PUT 指定したURL(URI)に対してエンティティ(メッセージボディ)に含まれる情報を保存することを要求
HEAD GETと同じだがヘッダのみを取得
OPTIONS 指定したURL(URI)がサポートしているメソッドを取得
DELETE 指定したURL(URI)で識別されるリソースの削除を要求
TRACE 自分宛にリクエストメッセージを要求するループバック試験に使用

このうちよく使われるのはGETとPOSTである。

HTTPのレスポンスメッセージ #

HTTPのレスポンスメッセージの例は以下の通り。上から開始行、ヘッダフィールド、改行、メッセージボディの順。

HTTP/1.1 200 OK
Date:Wed,  19 Aug 2020 23:48:50 GMT
Server:Apache
Content-type:text/html
(改行)
<!DOCTYPE html>
・・・
・・・

ここで、レスポンスメッセージの開始行には、レスポンスの状態を示す3桁の数字「ステータスコード」が含まれている。

ステータスコードは以下のように分類される。

ステータスコード 説明
1xx Informational(情報提供のコード)
2xx Success(成功)
3xx Redirection(転送)
4xx Client Error(クライアントエラー)
5xx Server Error(サーバーエラー)

HTTPのヘッダフィールド #

ヘッダフィールドには、メッセージの外部情報(メタ情報)を扱うためのHTTPヘッダが含まれる。

HTTPヘッダとして代表的なものを示す。

ヘッダ名 説明
Accept 受入可能なメディア型
Authorization HTTPの認証情報
Cache-Control キャッシュの振る舞い
Content-Language エンティティの自然言語
Content-Length メッセージボディの長さ
Content-Type メッセージボディの型
Cookie ブラウザに保存されたクッキーの値
Expires レスポンスの有効期間
If-Modified-Since 指定時刻以降に更新されているかを確認(条件付きGETで使用)
Last-Modified リソースの最終更新時刻
Referer リンクされている元のリソースのURL(URI)
Set-Cookie Webサーバが生成したクッキーの値
User-Agent ユーザーエージェントの名前

HTTPでの認証 #

HTTPでは、特定のファイルへのアクセスを制限するために認証することが可能である。

その種類は主に以下の2種類。

Basic認証 #

Basic認証は、ユーザー名とパスワードをコロンで接続し、Base64でエンコードして送信することで認証を実施する方式である。

盗聴や改竄が容易にできてしまう。

Digest認証 #

Digest認証は、Basic認証に加えて、盗聴や改竄を防ぐためにユーザー名とパスワードをMDSでハッシュ化して送信し、認証を実施する。

パスワードが暗号化されているので、盗聴できても解読しにくいという利点がある。

HTTP cookie (クッキー) #

HTTPは、システムの現在の状態を保持しない(ステートレスという)プロトコルであ利、クライアントとサーバ間の状態管理は行えないという点がある。

そこで、Webブラウザにcookie(クッキー)と呼ばれるデータを保持しておくことで、HTTPでの状態管理を実現することができる。

代表的な使用例としては、Webサイト上でのログイン状態の記録、ECサイト上でのカート情報の管理などがある。

クッキーは、サーバからクライアントに返るときのHTTPレスポンスのヘッダSet-Cookieにて指定される。

これにより、Webサーバ上で指定された情報がWebブラウザに保存される。

その後のWebページへのアクセス時には、保存していたクッキーをHTTPリクエストと同時にWebサーバに送ることで、状態管理を行う。

また、クッキーはJavaScriptを利用して、クライアント側で操作することもできる。