駆け出しエンジニアのブログ

モバイルエンジニア 荒川直樹 github.com/naoki1026

Webを支える新技術を読んでみた その3

概要
- HTTPについてまとめてみます。

HTTP

HTTPはRFC 2616で規定されたプロトコルです。RFC 2616で規定しているバージョンは1.1で、これが現時点での最新バージョンです。現在のWebではこのバージョンのHTTPが最も使われている。

名前はハイパーテキスト転送用プロトコルであるが、実際にはHTMLやXMLなどのハイパーテキストだけではなく、静止画や音声、動画、JavaScriptプログラム、PDFや各種オフィスドキュメントファイルなど、コンピュータで扱えるデータであればなんでも転送することができる。

HTTPはRESTの重要な特徴である統一インターフェース、ステートレスサーバ、キャッシュなどを実現している、Webの基盤となるプロトコルです。

RFC 2616

ウェブ関連仕様のこと。 ハイパーテキスト転送プロトコル -- HTTP/1.1

ステートレスサーバ

ステートとは状態のことを意味する。そのためステートレスは状態がないという意味になる。ステートレスなやり取りにおいてサーバはクライアントのセッション情報を保持せず、逆にステートフルなやり取りにおいてはセッション情報を保持する。ステートレスとはつまり、複数のページ間で情報を保持することができないということである。

HTTPでは、リクエスト/レスポンスの一往復が完結された処理とみなされるため、次に発生したリクエストは別物として認識されてしまう。しかしながら複数のページで情報を維持する必要がある場面はよくあり、Cookie情報とセッション情報という2種類の方法で対応することができる。

Cookie情報

サーバサイドからクライアントに対して書き込める小さなテキストのことを Cookieという。クライアントは、自分自身に保存されているCookie情報を、書き込み元のサーバに対してリクエストする際にヘッダ情報として送信する。

UNIXでは、二つのプログラム間で交換する小さなデータの塊をmagic cookieといい、そこから名付けられたのではないかと言われている。

Cookieは、クライアントがサーバから切断した後も永続的に保持されるため、数ヶ月前の情報であっても復帰することができる。ただしクライアントで管理されている性質上、改竄されたり、盗聴されたりする可能性があるため、セキュリティに関わる情報を保持することには適していない。

セッション情報

Cookieがクライアントベースの情報維持の仕組みであるのに対して、セッションはサーバベースの仕組みです。クライアント側には「セッションID」と呼ばれるユーザを識別するためのキー情報だけが渡され、クライアントはサーバにアクセスする際に、このセッションIDをヘッダ情報として送信する。

Cookieとは異なり、数日、数ヶ月単位でデータを保持することはできないが、セキュリティを担保することはできる。

HTML, HTTP, URIについてまとめた図

f:id:naoki1026:20190801212859j:plain