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を利用して、クライアント側で操作することもできる。