らんだむな記憶

blogというものを体験してみようか!的なー

Web を支える技術

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 の提案書を書いた。
    • クリスマスに最初のブラウザとサーバが完成。
    • 1993: イリノイ大学Mosaic を公開。
    • 1994: Berners-Lee が中心となって W3C が設立。
  • Web 以前のインターネット標準は IETFRFC として定められてきた。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 年)
    • GoogleAmazon が REST 形式の Web API を提供し始める。
    • Mashup には使い勝手の良い REST 形式が受け入れられた。

REST — Web のアーキテクチャスタイル

[Web のアーキテクチャスタイルとアーキテクチャと実装]

抽象化レベル Webでの例
アーキテクチャスタイル REST
アーキテクチャ ブラウザ, サーバ, プロキシ, HTTP, URI, HTML
実装 Apache, Firefox, Internet Explorer
  • REST = ULCODC$$(Uniform Layered Code on Demand Client Cache Stateless Server; 統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバ)は以下の 6 つを組み合わせたアーキテクチャスタイル:
    • クライアント/サーバ: UI と処理を分離
    • ステートレスサーバ: サーバ側でアプリケーション状態(いわゆるセッション状態)を持たない
    • キャッシュ
    • 統一インターフェース
    • 階層化システム
    • コードオンデマンド: プログラムをクライアントにダウンロードして実行する(FlashJava アプレット
  • 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 メソッド

  • メソッド
    • GET (CRUD の Read)
    • POST (CRUD の Create)
    • PUT (CRUD の Create, Update)
    • DELETE (CRUD の Delete)
    • HEAD
    • OPTIONS
    • TRACE
    • CONNECT
  • 冪等性: 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 Publishing Protocol、通称 AtomPub。Atom が規定したフィードやエントリで表現するリソースの編集 (CRUD) 操作を実現するためのプロトコル
名称 説明
Atom データフォーマットの規定(フィード, エントリ)
AtomPub Atom を利用したリソース編集プロトコルの規定
  • 向いている API: ブログサービスの API

JSON

Web サービスの設計

  • 細かかったので流し読みして終わり。