連載
» 2008年12月03日 00時00分 公開

もはやWeb利用者の常識、“URL”の意味を理解しようWebアプリの常識をJSPとStrutsで身につける(5)(2/3 ページ)

[中村圭一朗,株式会社メセナ・ネットコム]

HTTP

 WebのプロトコルであるHTTPは、HyperText Transfer Protocolの略で、一般のユーザーにとっても最も身近なプロトコルの1つです。これは、前回の「HTMLやStrutsに必須の“タグ”と“サブミット”の常識」で解説したHTMLで記述された文書ファイルや、画像ファイル、動画ファイルなどを“閲覧”するために利用します。

 連載第3回の「Webアプリにおけるサーバとクライアントの常識」でも解説しましたが、Webブラウザからの要求(リクエスト)に対して、サーバが応答(レスポンス)するという形でデータがやりとりされます。やりとりは数回行われることはなく、1回の送受信でコネクションは切断されます。詳細は後述します。

 HTTPを通じてWebブラウザでデータを取得する場合、データを受信する前に送信される各種メタ情報「HTTPヘッダ」があります。例えば、「http://www.atmarkit.co.jp/fjava/index.html」のHTTPヘッダ以下のような内容になります。

HTTP/1.1 200 OK
Connection: Keep-alive
Date: Mon, 01 Dec 2008 09:13:06 GMT
Via: 1.1 AN-0003011046070634
Server: Apache
Content-Type: text/html
Content-Type: text/html;CHARSET=SHIFT_JIS
Client-Date: Mon, 01 Dec 2008 09:13:06 GMT
Client-Peer: 202.218.219.160:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
Content-Script-Type: text/javascript
Content-Style-Type: text/css
Link: </stylesheet/ftop.css>; media="all"; rel="stylesheet"; type="text/css"
Link: </fjava/stylesheet/fjava.css>; rel="stylesheet"; type="text/css" Link: <http://www.atmarkit.co.jp/rss/rss091.xml>; rel="alternate"; title="@IT RSS 0.91"; type="application/rss+xml"
Link: <http://www.atmarkit.co.jp/rss/rss2dc.xml>; rel="alternate"; title="@IT RSS 1.0"; type="application/rss+xml"
Link: <http://www.atmarkit.co.jp/rss/rss.xml>; rel="alternate"; title="@IT RSS 2.0"; type="application/rss+xml"
P3P: CP="CAO DSP COR CURa ADMa DEVa OUR IND NAV "
ServerID: 01
Set-Cookie: Apache=38.99.91.121.78931228122786424; path=/; expires=Sun, 26-Nov-28 09:13:06 GMT
Set-Cookie: cookie=set; path=/
Title: Java Solution − @IT
X-Meta-Description: Java技術者のための総合情報提供フォーラム。Javaに関する技術情報を入門・基礎から現場での実践レベルまでお届け
X-Meta-Keywords: Java,Java入門,Eclipse,プラグイン,Servlet,サーブレット,JSP,Tomcat,Struts,WTP,EJB,チューニング,文字化け,Spring,Seasar

 また、HTTPのポート番号は通常「80」ですが、省略可能です。ポート番号についても後述します。

HTTPS

 HTTPSとは、HyperText Transfer Protocol over Secure Socket Layerの略で、HTTP同様リソースの送受信に利用される通信規約です。HTTPと異なる点は、次に説明するSSLによるデータ暗号化機能が付加されているところにあります。機密情報の送受信、例えば個人のプロフィール・クレジットカード情報などを安全に送受信できます。

SSL

 SSLとは、Secure Socket Layerの略で、インターネット上で安全に情報をやりとりするための暗号化プロトコルです。さまざまなセキュリティ技術を組み合わせて、「盗聴」「改ざん」「なりすまし」を防止できます。

FTP

 FTPとは、File Transfer Protocolの略で、TCP/IPネットワークにてファイルを転送するときに利用するプロトコルです。クライアントとサーバ間のファイル転送に使われ、処理としては主に「クライアントからサーバへのアップロード」「サーバからクライアントへのダウンロード」の2つとなっています。

 コネクションの確立には、「アクティブモード」「パッシブモード」の2パターンが存在し、アクティブモードは、通常のポートとデータ送信用ポートを利用しサーバからクライアントに対してコネクションを張る転送モードです。このモードは、第三者による「なりすまし」が可能で、セキュリティ上で安全とはいえません。

 パッシブモードは、アクティブモードとは逆で、クライアントからコネクションを張る転送モードです。危険性が少なく、現在ではこちらのモードが主流となっています。

SOAP

 SOAPとは、Simple Object Access Protocolの略で、アプリケーション同士のメッセージ交換、データやサービスの呼び出しを行う、XMLやHTTPなどを基としたプロトコルです。拡張性が高いのが特徴で、多くの通信プロトコルで利用可能です。

 SOAPによる通信は、XMLに「エンベロープ」と呼ばれる付帯情報が付いたメッセージを交換します。クライアントとサービス双方がSOAPの生成エンジン(SOAPプロキシ)・解釈エンジン(SOAPリスナ)を持つことにより、異なる環境間での通信が可能です。

 SOAPの概要を説明したところで、SOAPのサンプルを基に、もう少し詳しく説明したいと思います。

POST /WebSite1/WebService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/getHello"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header >
    ヘッダ情報部分
  </soap:Header>
  <soap:Body>
    <Hello xmlns="http://localhost:8080/hello/pages/Who.jsp">
      <str>string</str>
    </Hello>
  </soap:Body>
</soap:Envelope>

  • <soap:Envelope>(エンベロープ)
    Envelope(エンベロープ)は日本語で「封筒」の意味。メッセージ全体を包み込む封筒の役割を持つ。Envelopeは子要素としてSOAPヘッダとSOAP本体を持っている
  • <soap:Header>(SOAPヘッダ)
    「プロトコル・バインディング・ヘッダ」ともいう。SOAPヘッダは「封筒」でいうところの「あて先」に当たる。これによりサーバは、この後に続くメッセージがSOAP本体であると判断し、それに沿った処理を立ち上げることになる。SOAPヘッダは必須要素ではないので省略が可能。しかし、この要素を記述する場合は必ずSOAPエンベロープの最初の要素でなくてはならない
  • <soap:Body>(SOAP本体)
    メッセージのデータ本体。「封筒」でいうところの「手紙」に当たる。処理に必要なパラメータなどの情報を表す。処理結果・エラー情報もここに記述される

 このように、SOAPヘッダと本体を明確に区別することによって、プロトコルに依存しない情報交換を実現しています。SOAPヘッダさえ変えてしまえば、ほかのプロトコルでの通信も可能です。

REST

 RESTとは、REpresentational State Transferの略で、HTTPを使って通信を行う手法の1つです。WebブラウザでURLにアクセスし、HTMLを取得するのはHTTPと同様で、異なる点は取得するものがXMLであるところです。

 RESTの特徴は、動作確認が非常に安易であることです。URLの入力で動作確認が行えるため、開発におけるテストの場での効率向上に有効です。また、多くの開発言語で利用できるところも利点です。パラメータの書式は以下のとおりです。

http://【指定のURL】?【パラメータ1】&【パラメータ2】&……&【パラメータn】

メッセージングにおけるソケットと「ポート番号」

 メッセージングとは、データ・情報(メッセージ)交換を意味し、SOA(サービス指向アーキテクチャ)における基盤の1つです。

 メッセージを送信するときは、アプリケーションから「プロトコルスタック(Protocol stack)」に依頼され、プロトコルスタックとLANアダプタがメッセージをサーバに送信します。Webブラウザのアドレス欄にURLを入力してからの流れをまとめてみます。

URL入力→URL解読→HTTPリクエスト作成→OSにメッセージ送信依頼

 依頼を受けたプロトコルスタックがTCPプロトコルで送信する動きについて説明していきます。

 まず初めに、ソケット(socket)を作成し、サービス固有のポート番号をソケットに割り当てます。ソケットは、メモリ領域を確保し、通信を行うための制御情報を記録することで作成されます。ソケットを作成したらクライアント側のソケットをサーバ側のソケットに接続します(クライアント側のIPアドレスやポート番号をサーバに知らせる)。URLでは、ポート番号の指定は省略されることが多いです。

 コネクションが確立したらデータの送受信を行います。まずはクライアントからサーバにリクエストを送り、サーバからレスポンスを受け取ります。サーバ側がレスポンスを送り終わったら切断し、しばらくしてからソケットを抹消します。

WebアプリのリクエストはGET/POSTパラメータで

 GET/POSTは、サーバにリクエストを指示する「HTTPメソッド」という命令の一部です。HTTPメソッドにはほかにも、HEADやDELETE、PUT、TRACEなどありますが、Webアプリケーション開発においては多くの場合、HTMLページや画像ファイルの取得をリクエストするためのGET/POSTパラメータが使用されます。

 GETパラメータとは、URLとリクエストパラメータを組み合わせて情報を取得する方法です。

 POSTパラメータはGETパラメータと違い、明示的に指定しないと使用できません。POSTパラメータとして情報を取得するため、HTMLなどのフォームから入力する方法を使用します。

 次ページでは、ソースコードを交えながらそれぞれについて解説します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。