Webを支える技術

概要


HTTP、URI、HTML、そしてREST
実戦的なWebサービスの設計指針
なぜWebはこんなにも成功したのか

WEBのアーキテクチャスタイル

新システム設計時には下記、RESTアーキテクチャスタイルから必要な機能を選択する。

機能 内容 利点
クライアント/サーバ クライアント:ユーザインタフェース
サーバ:データストレージ
に役割を分離する
マルチプラットフォーム
(PC、携帯、ゲーム機)
サーバの助長化
ステートレスサーバ サーバ側でクライアントの状態を管理しない サーバの実装を簡略化できる
Cookieを用いると複雑化する
キャッシュ リソースを再利用する 通信量・回数低減
統一インタフェース GET、POST等8つのメソッドに固定 シンプル
独立性向上
断層化システム システムを断層化(分離)する ロードバランサ、プロキシ等の別システムを拡張できる
コードオンデマンド スクリプトプログラムをサーバからダウンロードしてクライアントで実行する クライアント側のみでの複雑な処理が可能

URI

URIを変わりにくくするためには
プログラミング言語に依存した拡張子、パスを含めない


https://office-yone.com/servlet/LoginServlet

メソッド名、セッションIDを含めない
https://office-yone.com/login.do?action=show

https://office-yone.com/login.jsp?jsessionid=99999

リソースを名詞に
URIのユーザビリティ
URIをシンプルに短くする事で、
・タイプミスの軽減
・メディアでの露出のし易さ
・経費削減
等が見込める
不透明性


想像


本来アクセスされたくないリソースにアクセスされる恐れが高まる

HTTP

TCP/IP

HTTPはTCP/IPが動作する事を前提に動作する

プロトコル 処理内容
アプリケーション層 HTTP、SSH、SMTP、DNS 接続~送受信~切断
セッション層
トランスポート層 UDP、TCP IPから送信されたパケットの到達処理
ネットワーク層 IP パケットを宛先へ送信
物理層/データリンク層 イーサネット 電気信号を伝達

同期型

HTTPは以下の方式を採用しており、レスポンスを取得するまでは待機し続ける。
クライアント/サーバ方式
リクエスト~レスポンス

リクエスト/レスポンスメッセージ

HTTPリクエストメッセージ
HTTPプロトコル/HTTPリクエスト」参照
HTTPレスポンスメッセージ
HTTPプロトコル/HTTPレスポンス」参照

ステートレス

ステートフル ステートレス 備考
クライアントの状態
アプリケーション状態
記憶する 記憶しない
通信量
差分のみリクエストする

常に状態をリクエストする
負荷 認証時等
スケールアウト ×
実装 複雑 単純

メソッド

メソッド 処理内容 べき等 安全性
GET リソースの取得
POST リソースの作成、追加、他 × ×
PUT リソースの更新、作成 ×
DELETE リソースの削除 ×
HEAD リソースのヘッダ(メタデータ)取得
OPTIONS リソースがサポートするメソッドの取得
TRACE 試験用
CONNECT プロキシ接続設定

べき等
常に取得できる結果が同一である事
PUT、DELETEを複数回実行した場合、1回目で更新対象が変化して2回目で更新が失敗したとしても、更新したという結果が得られる
安全性
リソースが変化しない事

ステータスコード

HTTPプロトコル/HTTPリクエスト」参照

HTTPヘッダ

メタ情報を記述する部分(≠body)
ヘッダ情報からプログラムの挙動を決定する
(主にサーバ)

メディアタイプ

bodyの内容の種類を示す
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

ファイル形式 一般的な拡張子 MIMEタイプ デフォルト文字コード
charset未指定時
テキスト .txt text/plain ISO 8859-1
※英数字、記号から成る
(日本語無し)
テキスト .csv text/csv
HTML文書 .htm .html text/html
スタイルシート .css text/css
JavaScript .js text/javascript
VBScript .vbs text/vbscript
CSS .css text/css
XML文書 .xml text/xml(非推奨)
GIF画像 .gif image/gif 無し
JPEG画像 .jpg .jpeg image/jpeg
PNG画像 .png image/png
JSON文書 .json application/json
CGIスクリプト .cgi application/x-httpd-cgi
Word文書 .doc application/msword
PDF文書 .pdf application/pdf
JavaScript .js application/javascript
XML文書 .xml application/xml 無し
XML宣言部での定義推奨
<?xml version="1.0" encoding="utf-8" ?>
XHTML文書 .xml application/xhtml+xml

エンコーディング

charset=utf-8
charset=sjis