HTTPとは
- RFC2616で規定されたプロトコル
- 最新バージョンは1.1
- 様々なデータを転送可能
- RESTを実現するWEB基盤
- 統一インターフェース
- ステートレスサーバー
- キャッシュ
TCP/IPとは
階層型プロトコル
アプリケーション層
トランスポート層
インターネット層
- IP
- IPアドレス単位で通信
ネットワークインターフェース層
HTTPの歴史
初期(HTTP 0.9)
- 1990年に発明
- 仕様書なし
- ヘッダーなし
- HTTPメソッドはGETのみ
統一期(HTTP 1.0)
- 1993年~1996年に発表
- Netscape、InternetExploreのブラウザ戦争の時期
- ヘッダーの導入
- GET以外のHTTPメソッドの導入
完成期(HTTP 1.1)
拡張期
クライアント/サーバー方式
クライアントの役割
サーバーの役割
- リクエストの待機
- リクエストメッセージの受信
- リクエストメッセージの解析
- アプリケーションプログラムへの処理委譲
- アプリケーションプログラムからの結果を取得
- レスポンスメッセージの構築
- レスポンスメッセージの送信
HTTPメッセージ
リクエストメッセージ
- リクエストライン
- メソッド
- リソースに対しての操作
- 例)GET、POST、PUT、DELETEなど
- リクエストURI
- サーバー内のリソースパス
- 例)http://example.jp/test
- プロトコルバージョン
- 使用するHTTPのバージョン
- 例)HTTP/1.1
- メソッド
- ヘッダー
- データを要約したメタデータ
- 例)ホスト名
- データを要約したメタデータ
- ボディ
- アプリケーションに渡すデータ(パラメータ)
レスポンスメッセージ
- ステータスライン
- アプリケーションが返す処理結果
- 例)200:成功、403:権限エラー、500:サーバー内エラー
- ヘッダー
- ボディ
- クライアントが目的を果たすために渡すデータ
- 例)HTML(画面表示)
HTTPメッセージの構成要素
構成要素 | リクエスト | レスポンス |
---|---|---|
スタートライン | リクエストライン | ステータスライン |
ヘッダー | リクエストヘッダ | レスポンスヘッダ |
空行 | ||
ボディ | リクエストボディ | レスポンスボディ |
HTTPのステートレス性
アプリケーション状態
- システムにログインしてからログアウトするまでの一連の操作の間の状態
- セッション状態ともいう
- アプリケーション状態を保存しないのがステートレス
ステートフルの例
ステートフルの欠点
- クライアントの数が増えた場合にスケールアウトさせにくい
- 大規模サービスには適用できない
- 1台のサーバで管理できるクライアントの数には限界がある
- 不特定多数のクライアントを相手にするとクライアントとサーバを固定できない
- アプリケーション状態を同期させる必要がある
- データを同期するとパフォーマンスが低下する
ステートレスの利点
- システムをスケールアウトしやすい
- クライアントがアプリケーション状態を都度伝えるため、サーバーで管理しない
- クライアントが増加した場合はサーバーの増設で対応できる
- クライアントはどのサーバーにリクエストしてもいい
ステートレスの欠点
- パフォーマンスの低下
【WEBを支える技術】URI設計編~良いURI設計とは~ - WEB道楽
【WEBを支える技術】HTTP基礎編~シンプルさが標準化~ - WEB道楽