2005年度 情報システム構成論 第13回 Webコンテンツ/サービス 西尾 信彦 [email protected] 立命館大学 情報理工学部 情報システム学科 ユビキタス環境研究室 World Wide Web • HypertextとHyper Linkにより世界中に張り巡らさ れた分散型コンテンツ • アクセスが安易であり,携帯電話,PC,情報家電 などさまざまな機器から利用可能 • URLにより世界中のページを一意に指定可能 • ユーザ⇔サービス提供者間の重要なインター フェイスになっている • サービス提供者はWebサーバを構築しているこ とが多いため、Web閲覧以外に分散アプリケー ションとして利用する場面が増えてきている HTML (Hypertext Markup Language) • 文章中に構成情報を組み込める • 文章間の関連情報を組み込める – Hyper Link (一般的なリンクのこと) • 静的コンテンツ – 動きが無く、事前に用意した物を見せるだけ – 利用者からの返答などが受け取れない HTTP (Hypertext Transfer Protocol) • 短期コネクション型のためほぼス テートレス • • • • • クライアント-サーバ間でデータをやり 取りするためのプロトコル 要求とレスポンスからなり、一回のや り取りごとにTCPセッションが終了する HTTP1.1以降では一回ごとにTCPセッ ションを切断しないKeep Aliveモードも 存在する レスポンスはバイナリで返されるが、 Webページなどの場合、バイナリ⇒文 字列⇒文字列解析という手順でブラウ ザでビジュアル構築される 実際のところ、文字列でやり取りされ ているだけなので、telnetなどで通信を 再現することも可能(右参照) telnet www.ubi.is.ritsumei.ac.jp 80 Trying 172.25.12.192... Connected to www.ubi.is.ritsumei.ac.jp. Escape character is '^]'. GET /index.html HTTP/1.0 HTTP/1.1 200 OK ・ ・ ・ <html> <head> <meta http-equiv="content-type" content="text/html;charset=Shift_JIS"> <meta name="generator" content="Adobe GoLive 5"> <META NAME="author" CONTENT="ruec"> <META NAME="description" CONTENT="ユビキタス環境研究室"> ・ ・ ・ </html> 静的コンテンツからの脱出 • クライアントサイド動的コンテンツ – HTMLなどに組み込まれたスクリプトなどに従い、クライアン トサイドで動的にコンテンツを動かす – 動作の可否・速度などはクライアントに依存する – Java Applet, JavaScript, DHTMLなど • サーバサイド動的コンテンツ – – – – クライアントの要求に従い、動的にHTMLを構築する 基本的にリンクがトリガーになる クライアントではHTMLに対応するだけでよい CGI, Servlet, JSPなど Java Applet • ネットワーク経由でバイナリファイルがダウン ロードされ、ブラウザなどに組み込まれたJava VMで実行される • 個別にセキュリティを設定でき、守らせることが 出来るのでセキュリティ的に強い • 基本的にプログラムであるため、設定されてい るセキュリティポリシー内であれば何でも出来る – ウィンドウ表示、動画表示、ネットワークゲーム、 チャット(メッセンジャー)などなど • 一時期は完全なる動的コンテンツが作成できる ことで注目された 現在のJava Applet • 以下の理由により現在はあまり使わ れていない – ネットワーク転送に時間がかかること – 実行速度がクライアント依存 – Java VM経由で起動のため起動までに 時間がかかる(クライアント依存) JavaScript • 初期に登場したクライアントサイドスク リプト言語(NetscapeのLiveScript) • 動作がクライアントのブラウザ依存で あるが、比較的軽い • 独自のウィンドウを開いたりすること は出来ず、ブラウザを操作する(ブラ ウザで可能なことに限る) DHTML(Dynamic HTML) • JavaScriptやVB Scriptなどを埋め込み、動的コ ンテンツ作成用に拡張されたHTML • MicrosoftとNetscapeがHTMLを独自拡張したも の(1997) • 現在、主要ブラウザ間で仕様が異なるため、 W3Cが仕様を策定中 • 代表的な機能としてDOMなどがある – DOM(Document Object Model) • 画像や文字などをすべてオブジェクトとして扱い、移動や 属性変更などを可能にしたもの クライアントサイドの動向 • 現在、クライアントサイドでの処理はあまり 歓迎されていない – 理由 • クライアント依存で利用の可否が決まる • クライアントへの転送量が増える • 正常動作テストが行いづらい – 全環境のクライアントを用意するのは不可能 • 事前の入力漏れチェックや比較的簡素な 動作を実行するのに使われている CGI(Common Gateway Interface) • 名前からもわかるように、プログラムへのゲートウェイ という意味 • サーバ側でプログラムを実行し、標準出力にHTMLと して出力された文字列をWebページとして表示する • サーバが対応していなければ利用できない CGI(2) • CGI自身はプログラムなので、背後にどの ようなプログラムが存在していてもよい – C言語、Perl、Ruby、PHPなど • 文字列操作に強い言語が選ばれることが 多い – 一番代表的なものとしてPerl – 最近プログラムが容易で機能豊富なため台頭 中のPHP CGIの送信形式(1) • GET型 – 標準のHTML取得要求アドレスの末尾に必要事項を付加して要 求する(例) • http://www.ubi.is.ritsumei.ac.jp/cgi/test.cgi?user=xxx – ?以降がデータ部、送信先では環境変数として認識される – サーバの処理系が許容している長さ以上の環境変数は利用でき ない。 – 送信内容がブラウザのアドレス表示部に見えてしまう • パスワードなどの送信時には利用するべきではない HTML要求部が下記のように変わるだけ GET /hoge.cgi?data1=hoge1&data2=fuga HTTP/1.0 • POST型 CGIの送信形式(2) – HTML取得要求は普通のアドレスで要求し、追加 データとしてデータを送信する – 送信データはサーバ側でプログラムへの標準入力と して処理されるため、制限は無い – 大量のデータ送信時の性能はネットワーク性能に左 右される //GETの代わりに以下のPOSTを使う POST /bar.cgi HTTP/1.0 Content-Length: 渡したい文字列の長さ (空行) hoge=fuga&hoge2=fuga2&.... Servlet • Javaで実装されたCGIのようなもの • Webサーバ以外にServletコンテナが必要になる • CGIと違い、要求ごとにプログラムが起動され ず、二回目以降は高速に動作する • プログラムが終了しないため、以前の通信内容 を覚えておくことが可能 CGIやServletの利点・欠点 • 利点 – 動的コンテンツを作成できる – 比較的簡単にプログラム可能 • 欠点 – 基本的にプログラムであるため、Webデザイナ にとってわかりづらい – 画面変更のみでも、プログラム変更が必要に なり、再テストが必要になる Webデザイナ・プログラマの共存 • 企業などではWebページを専門家がデザインし ている場合が多い • CGI等はデザイン性が必要になるWebページの 一種であるにもかかわらず,プログラムである • 下記のような場合は少ない – プログラマでWebデザインが出来る人 – Webデザイナでプログラムが出来る人 • CGIなどのプログラム部分と画面部分の分離が 必要になる PHP,SunのJSP,MicrosoftのASPなど JSP(Java Server Pages) • WebデザイナにはHTMLにHTMLに似た拡張 タグを追加することでWebページを作成できる JSPとCGIソース比較(CGI) #!/usr/bin/perl $password="password" if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } if ($in{'key'} ne "" && $in{'key'} eq $password}) { $result = "Logined"; } else { &error("Authorization Required",“error"); } } print<<"EOF" <html> <head> <title>Sing in</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> </head> <body> EOF if($login ne ""){ print $result; }else{ print<<"EOF" <SCRIPT language="JavaScript"> <!-function password(f){ var strg; strg = prompt("パスワード?",""); if (strg != null) { f.key.value = strg; f.submit(); } } //--> </SCRIPT> <form action=index.cgi method=post> <input type=hidden name=key> <input type=hidden name=page value="page"> <input type=button onClick="password(this.form)" value="Login"> </form> EOF } print<<"EOF" <p></body></html> EOF JSPとCGIソース比較(JSP) <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/myTag" prefix="myTag" %> <html:html locale="true"> <head> <title>Sign in, Please</title> <%--<html:base/>--%> </head> <body bgcolor="white"> <html:errors/> <body> <h1>Login</h1> <myTag:printLoginForm/> </body> </html:html> Webサービス • HTTP通信を利用しての遠隔プログラム(サービ ス)呼び出しのこと • 直接ユーザにページを表示するのではなく、プロ グラムの一部として動作する • HTTPによりやり取りするため、端末環境が異 なっていても問題ない (プログラミング言語的にもOS的にも,ファイヤ ウォール的にも) • 今現在確固たる仕様は存在しない • ディファクトになりつつある仕様 – SOAP+UDDI+WSDL RPC: Remote Procedure Call • 遠隔手続き呼出し • 関数呼出しをネットワークを挟んで行なう • 呼出し側: – 呼出す関数とその引数を指定して, – それらをデータとしたパケットを送り出し, – 返答を待つ • 関数側: – サービスポートに対してリクエストパケットが来るのを 待つ – リクエストに応じた処理を行ない – 結果をパケットにつめて送り返す RPC: Remote Procedure Call • 呼出し側も関数側もスタブ(切り株)と呼ば れるライブラリをリンクする • スタブが呼出しおよび返答のためのネット ワークアクセスを担う • スタブを自動生成するために, – お互いのインタフェース記述の言語 – それを処理するインタフェースジェネレータ RMI: Remote Method Invocation • 普通名詞としてのRMIは,オブジェクト指 向プログラミングでRPCを実現すること • CORBAなどの規格制定より本格化 – ORB: Object Request Brokerの具体化 – LAN内からインターネットワイドに:IIOP • Javaでの実装はRMIクラスと呼ばれ,RMI は固有名詞となる – 実装ではTCP/IPのソケット通信を隠蔽する RMI: Remote Method Invocation • 事実上,ファイアウォールに囲まれたイン ターネットでは利用できない • 空いているポートはWebアクセスとMailア クセス • スタブ生成にXMLを利用するのがはやり • SOAPはこれらを背景としている SOAP (Simple Object Access Protocol) • Service Oriented Access Protocolとも言われる • インターネット経由でRPCを行うための規格 • XMLを利用した完全に文字列によるXMLRPCの一種 • HTTP上でXMLを用いて、サービス呼び出し、 返答受信に必要な情報をやり取りする – 第一引数は何で、返信は何型で値はいくらかなど XML-RPCの例 POST /RPC2 HTTP/1.0 User-Agent: Frontier/5.1.2 (WinNT) Host: betty.userland.com Content-Type: text/xml Content-length: 181 <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall> WSDL (Web Service Description Language) • Webサービス記述言語 • 実態としてはXML • 2000年9月にW3Cにより、Ver.1.0の仕様策定 が行われた • Webサービスを利用するためのSOAPのメッ セージフォーマットを規定する • 人間の手によって作られることはほぼ無く、 SOAPメッセージなどから自動的に作成する UDDI (Universal Description, Discovery and Integration) • Webサービスを登録・検索できるディレクト リサービス • WSDLを用いてWebサービスが登録される • Webサービスを必要とするサービスは UDDIより、必要となるサービスをWSDLの 属性により検索し利用する。 • Webサービスの動的な結合をおこなわない のであれば必要ない Web利用の拡大 • 以前はコンテンツ配信のために利用 • 次第にクライアントとの双方向性を持った 対話型サービス提供ツール化 – ショッピング、オークションなど • 次期Webの利用法として、プログラム間の RPCをOS,プログラミング言語などに依存 しない形で実現する手段として期待されて いる
© Copyright 2024 ExpyDoc