Webを支える技術 ―― HTTP,URI,HTML,そしてREST:書籍案内|技術評論社 を読んだ。個々の用語は聞いたことがあるとか知っているような気がしても全然説明できないものも多かったので少し参考になった。少しというのは、座学として理解した気になっても、自分で実際に手を動かさないと身につかないのでということで。 10 年以上前の本だし、分かるところは適当に補足したものの、SSL 3.0 とか今では禁止になっているものも出てくるので、その辺は適宜最新の動向を探しつつ、ここ最近の 10 年を補う本を読まないと今時のことは分からないなとは感じる。
Web 概論
Web とは何か
- 何だろう・・・。
- 支えている技術は HTTP, URI, HTML。
- 分散システム。
Web の歴史
- RPC: Remote Procedure Call。最初にその用語を見た時には DCOM とセットだったような記憶が。Active X とか色々ごちゃごちゃに・・・。
- CORBA, DCOM: 何か Microsoft 的なイメージしかない。
- CERN で働いていた Berners-Lee が 1990/11/12 に Web の提案書を書いた。
- Web 以前のインターネット標準は IETF の RFC として定められてきた。RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) が有名すぎて、半分はコレのイメージ。
- REST: Representational State Transfer。
- カリフォルニア大学の Roy Fielding が博士論文として提出。
- SOAP:
- Amazon が 2002 年に SOAP 形式と REST 形式 API を用意。利用比率は 20:80。
- Web 2.0 (2004 年)
REST — Web のアーキテクチャスタイル
- REST は Web のアーキテクチャスタイル(別名: アーキテクチャパターン)。
- アーキテクチャのサンプル: MVC, パイプ & フィルタ, イベントシステム
- いわゆるデザインパターンは別名「マイクロアーキテクチャパターン」。
抽象化レベル | Webでの例 |
---|---|
アーキテクチャスタイル | REST |
アーキテクチャ | ブラウザ, サーバ, プロキシ, HTTP, URI, HTML |
実装 | Apache, Firefox, Internet Explorer |
- REST = ULCODC$$(Uniform Layered Code on Demand Client Cache Stateless Server; 統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバ)は以下の 6 つを組み合わせたアーキテクチャスタイル:
- REST 以外のアーキテクチャスタイルの例は P2P。
- RESTful: REST の制約に従っていて REST らしいこと。
URI
URI の仕様
- URI を構成するパーツ: URI スキーム, ホスト名, パス
- テレビの世界だと、
arib−dc://<orig_network_id>.<transport_stream_id>.<service_id>[.<event_id>]/. <component_tag>/<moduleName>/<resourceName>
みたいなのが使われていたり・・・。ホスト名的なものは<orig_network_id>.<transport_stream_id>.<service_id>[.<event_id>]
になるんだろうな。 - % エンコーディング: Web ページの文字エンコーディングでエンコード。今時なら UTF-8 で。e.g.
あ
→%E3%81%82
。 - URI スキームの公式な一覧は IANA にある。
- URI = URL + URN。URN の例は
urn:isbn:9784774142043
。
URI の設計
http://example.jp/Login.do?action=showPage
・・・凄いどこかで見たような記憶が・・・。
HTTP
HTTP の基本
[階層型プロトコル]
層名 | 例 |
---|---|
アプリケーション層 | HTTP, NTP, SSH, SMTP, DNS |
トランスポート層 | UDP, TCP |
インターネット層 | IP |
ネットワークインターフェース層 | イーサネット |
- HTTP 0.9: GET メソッドだけ。
- HTTP 1.0: HTTP 最初の標準化 (IETF)。1996 年に RFC 1945。
- HTTP 1.1: HTTP の完成。
- ステートレスなシンプルなプロトコル。
HTTP メソッド
- メソッド
- 冪等性: PUT, DELETE, GET, HEAD は冪等。
- 安全性(操作対象のリソースの状態を変化させない): GET と HEAD は安全。
ステータスコード
- 眺めて終わり。
HTTP ヘッダ
- Content-Length とチャンク転送(ボディを分割)。
- Basic 認証: ユーザ名とパスワードを
:
で繋いで Base64 でエンコードしたものをAuthentication
ヘッダに入れてリクエスト。怖い・・・。 - HTTPS = HTTP と SSL/TLS を組み合わせた通信の総称。
- 認証方式
ハイパーメディアフォーマット
HTML
- SGML: 構造化文書のためのマークアップ言語。
- 複雑だったので、仕様をシンプルにした XML が開発。
- 初期の HTML: Berners-Lee が SGML をベースに開発。
- XHTML 1.0: HTML 4.01 を SGML ベースから XML ベースに変えた仕様。
- XHTML 1.1: 拡張版。
- HTML5: 新しい HTML。SGML 構文と XML 構文を用意している。
- 某 BML は XHTML ベースであった・・・。
[名前空間]
- 以下のようにして名前の衝突を防ぐ。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom"> <head> <link rel="stylesheet" href="base.css" /> <atom:link rel="enclosure" href="attachment.mp3" /> </head> ... </html>
microformats
- HTML の中でさらに意味のあるデータを表現するための技術。
Atom
- Atom Syndication Format、通称 Atom。
- RFC 4287 が規定する XML フォーマット。ブログなどの更新情報を配信するためのフィードとして知られる。検索エンジンや写真管理など様々な Web サービスの Web API として利用できる。
Atom Publishing Protocol
名称 | 説明 |
---|---|
Atom | データフォーマットの規定(フィード, エントリ) |
AtomPub | Atom を利用したリソース編集プロトコルの規定 |
JSON
- JavaScript Object Notation (RFC 4627)。
Web サービスの設計
- 細かかったので流し読みして終わり。