【Web】HTTPでやりとりする仕組み

HTTPリクエストメソッド

ブラウザからWebサーバーに対して出されるお願い。

GETとPOST

GETメソッドとPOSTメソッドは、HTTPリクエストメソッドの一つ。GETメソッドは、HTMLファイルや画像などのデータが欲しいときに、POSTメソッドは、入力データを送信したい場合に使用する。
GETメソッドもPOSTメソッドのように、データの送信に使用できるが、データの送信方法が異なる。GETメソッドでは、リクエスト行(URL)のパラメータにデータを指定して送信するため、送信データの情報がブラウザの履歴に残ってしまう。一方で、POSTメソッドでは、メッセージボディにデータが組み込まれるため、履歴に残ることはない。したがって、ユーザーIDやパスワードといった情報を送信する場合は、機密性の観点からPOSTメソッドを使う。

HTTPS

HTTP over SSL/TLSの略。
HTTPの通信において、暗号化方式であるSSL(Secure Sockets Layer)やTLS(Transport Layer Security)を利用したもの。

SSL/TLSの仕組み

  • 盗聴防止(暗号化通信)
    万が一傍受されたとしても内容を解読させないためにデータを暗号化する。

  • 改ざん防止
    あるデータから一意の短いデータ(ハッシュ値)を計算して取り出すメッセージダイジェストを使用して、ハッシュ値の比較により改ざんを検知する。

  • なりすまし防止(Webサイト運営元の確認)
    Webサーバーに配置されたSSLサーバー証明書を接続時に検証することで、Webサイト運営会社の身元を確認できる。SSLサーバー証明書自体は誰でも発行できるが、信頼された認証局以外の証明書が利用されている場合はWebブラウザ上に警告画面が表示され、検知できる。

ステートフルとステートレス

ステートレスは「状態を保持しない」、ステートフルは「状態を保持する」という意味。
HTTPのプロトコルはステートレスである。リクエストとレスポンスの一往復のやり取りで完結する。HTTPは、多数のクライアントからの接続が発生するWebシステムで使用されるため、要求された内容に対して応答するだけのステートレスな設計が適している。

(仮に1対1のやりとりであれば、ステートフルなシステムでも負荷にならない。)

Cookie(クッキー)

HTTPはステートレスなプロトコルであるため、WebブラウザとWebサーバーとの一連のやり取りにおいて、状態を保持し管理する仕組みがない。そのため、ECサイトなどで状態を保持し管理する必要がある場合はCookieと呼ばれるデータが用いられる。

Cookieのやり取り

Webサーバーに接続してきたブラウザに対して、コンテンツとともにブラウザに保存してもらいたい情報をCookieとして送る。

ブラウザは、受け取ったCookieを保存しておく。

次回、Webサーバーに接続するとき、保存しておいたCookieを送信する。
Webサーバーは、接続してきた相手をCookieから判断することができる。

Cookieの送信方法

Cookieは、HTTP通信のメッセージヘッダーに含めることで送信する。
ブラウザは、HTTPリクエストのヘッダーにSet-Cookieヘッダーを、Webサーバーは、HTTPレスポンスのヘッダーにCookieヘッダーを含めることでCookieを送信できる。

Cookieの有効期限

Set-Cookieヘッダーでは、オプションでCookieの有効期限を設定することが可能である。
この有効期限が設定されていないCookieは、Webブラウザが閉じられると同時に削除される。このようなCookieをセッションCookieと呼ぶ。
CookieWebブラウザの識別にも利用されるため、盗まれて他人へのなりすましに悪用されることもある。そのため、セキュリティ上の観点からショッピングサイトなどではセッションCookieがよく利用される。

セッション

ブラウザとWebサーバーのやり取りにおいて、一連の関連性のある処理の流れをセッションと呼ぶ。

〈sessionの例〉
ECサイトでの、「商品を選ぶ」「商品を買い物かごに入れる」「買い物カゴの中身を確認する」「商品を購入する」といった処理の流れ。

セッションの管理

1つのブラウザからの処理を一連の処理(=セッション)として扱いたいときには、Cookieを用いてセッションを管理できる。
セッション内でのやり取りのデータ(どの商品を買い物かごに入れたのかなどの情報)は、セッションIDと紐付けてWebサーバーに保存される。
ブラウザは、セッションIDを用いてWebサーバーに保存されているセッションデータを参照できる。
セッションIDは個人を識別するために使われるため、なりすましを防ぐ推測されにくい値である必要がある。

URI

情報やデータなどのリソースを識別するための記述方法をURI(Uniform Resource Identifier)と呼ぶ。URIのうち、リソースが存在する場所を示すものをURL(Uniform Resource Locator)という。HTTPにおいても、リソースを特定するためにURIが利用される。

URIで使用できる文字

  • 予約文字:!, #, $などの記号
  • 非予約文字:半角英数字
  • 予約文字、非予約文字以外の文字:日本語など

URIでは、非予約文字のみ使うことができる。予約文字、非予約文字以外の文字をURIで使用する場合、パーセントエンコーディングと呼ばれる方法で文字を変換する必要がある。
パーセントエンコーディングでは、「%」に表記できない文字の文字コードを16進数で表した数値を付加した形に変換する。

URL

Webページを表示するために、取得したいWebページをURLで指定する。 URLには、どのやりとりの手順で、どのWebサーバーに、何のコンテンツを取りに行くか、の情報が含まれている。

参考

イラスト図解式 この一冊で全部わかるWeb技術の基本 | NRIネットコム株式会社, 小林 恭平, 坂本 陽, 佐々木 拓郎 |本 | 通販 | Amazon

HTTPリクエス