xxxさんの備忘録

xxさんのブログです.xxさんはネカマです.

「プロになるためのWeb技術入門」lesson1-3まで

人に勧められたのでとりあえず、「プロになるためのWeb技術入門」を読んでます。

とりあえず、以下は備忘。

 

 

 

## lesson1「Webアプリケーション」とは何か
・Webアプリケーション
    処理の主体がサーバー、画面の表示がWebブラウザ、インストールが不要のものを指す

 

##lesson2 Webはどのように発展したか    
・wwwの誕生
→図表などをテキストファイル形式で表現できるようにHTML、また相互参照のためにハイパーリンクなども生まれた

 

●Webを支える技術の発明
 ・Webサーバーとクライアント
 ・wwwによるハイパーテキストの公開と閲覧は「Webサーバー」と「Webクライアント」というソフトウェアで成り立っている。
 wwwでは、webサーバーがネットワーク上に公開するハイパーテキスト(htmlの形式ファイル)を蓄積し、webクライアントの要求に
 したがって必要なHTMLファイルを渡す仕組みになっている。
 ・一般的にクライアントからサーバーに対する要求を「リクエスト」、
 サーバーからクライアントに対する応対を「レスポンス」と呼ぶ。
 ・現在webサーバー用のソフトウェアとして、「Apache」や「IIS」(cf.「nginx」)などが利用されている。
 ・Webクライアントは「IE」、「Firefox」、「Safari」などが一般的

 

●なぜクライアントとサーバーに分けるのか
 ・wwwのように様々なコンテンツを不特定多数の人にコンテンツを公開するには、コンテンツをできるだけ一か所にまとめておいたほうが(更新などの)管理が楽になるため。そのため、wwwを実現するにはWebサーバーのように1つのコンピュータに情報を管理する
 ・wwwでは多くの人が自由にコンテンツを閲覧できなければならない。そのため、利用者の手元にあるPCをWebクライアントとして利用できるようにした。●「そのリソースはどこにある?」-URL
・url -リソース(資源)の位置を指し示す統一的な記述方法
スキーム、ホスト名、パス名で構成される。a)スキーム
リソースを取得する方法を示す
https 暗号化されたhttp通信を表すスキーム
mailto 電子メールの宛先を表すスキーム
ftp ftpプロトコルによるスキーム
file ファイルシステムのなかのファイルやディレクトリを参照するためのスキームb)ホスト名
リソースが存在するホスト(コンピューター)名を示す。ネットワークに接続され他のコンピューターからのリクエストを受け取り結果を返すものをホストコンピューターと呼ぶ。
ホスト名にはローカル名と親ドメイン名に分けられる。

 

・親ドメイン名 ホストが存在する組織を示す
(親ドメインは自由に決めてしまうとインターネット上での一意性が失われるため、指定された団体が管理をしている)
・ローカル名 組織のなかのコンピューターにつけられた名前c)パス名
ホスト名で指定されたリソースの位置を示す

 

●HTTP
サーバーとクライアントがやりとりするためには通信を行うための取り決めを「通信プロトコル」とよぶ。また、HTMLの転送に適したプロトコルを「HTTP」(他のプロトコルと比べてシンプルかつ実装が簡単である)と呼ぶ。
1996年、HTTP/1.0
現在はHTTP/1.1普及している。●コラム
以上の規約・仕様はインターネット上に公開されておりRFCと呼ばれる。●CGIの誕生・静的コンテンツへの要求~CGIの誕生
 サーバーは元々用意されていたコンテンツをクライアントからのリクエストに応じて返していた。
 Webサーバー上で動作するプログラムを作成し、そのプログラムが人間の代わりにコンテンツを生成することを考え出した。
 動的コンテンツープログラムによって生成されたHTMLをはじめとするコンテンツ
 静的コンテンツー従来のようにあらかじめ用意されたコンテンツ
 動的なコンテンツを生成してWebクライアントに渡すにはWebサーバとコンテンツを生成するプログラムとの連携が必要である。
 そこで「CGI(Common Gateway Interface)」という仕組みを考え出した。
CGIではWebサーバがクライアントから受け取ったリクエストをWebサーバ上に動作するプログラムへ渡す。
 プログラムはリクエストを参照してHTMLを生成し、Webサーバーに返した。
 これらのコンテンツを生成する目的で活用されたのが「Perl」や(大規模なものや高速性が求められるもの)「C」
 であった。・Webの爆発的な普及
 CGIの普及によって「検索サイト」、「掲示板システム」、「ショッピングサイト」などを提供するサイトが実現できるようになった。
 
サーブレットの登場
 ①開発言語の問題、②性能の問題の二点の問題が浮上した。
 ①大規模化、複雑化によって当時主に使われていたPerlが、
 テキスト処理を得意としていたために大規模なアプリケーションの開発を得意としていなかった。また、
 オブジェクト指向プログラミングも取り入れられていなかった。
 ②Webブラウザからリクエストが届くたびにCGIを通してプロセスを起動していた。これらには時間がかかりすぎ処理が追い付かなくなった。
 
 Java/サーブレットの誕生
 この時期に登場したのが「Java」である。
 ・オブジェクト指向の機能のフルサポート
 ・Cに似た文法
 ・(マルチスレッド・セキュリティ・ネットワーク通信など当時重要性が増していた技術が標準であった)
 といった利点から多くの開発者に受け入れられた
 Java自体はWebアプリケーションのために開発された言語ではなかったため、
 JavaEEの一部として「サーブレット」というWebアプリケーション開発をサポートするための機能が提供されるようになった。
 
 「サーブレット」とは、JavaでつくられたHTMLなどのWebコンテンツを生成するプログラムのことを指す。
 コンテンツを生成する言語がJavaであり、オブジェクト指向のサポートによって大規模アプリケーションの開発に向いていること、 Webサーバーと同じプロセスを毎回起動することなく、比較的高速に動作する利点があった。
 
Javaでアプリケーションを開発する利点
 Javaには特定のOSやハードウェアに依存せずに動作する。
 これらはC言語のようにソースコードを直接コンピュータの機械語コンパイルするわけではなく、
 「JavaVM」と呼ばれる仮想のコンピューター言語にコンパイルして実行するためである。
 しかし、サーブレットの場合「Webコンテナ」の設置が難しいなどの点もあります。

 

●コラム cf.Javaアプレット
JavaアプレットWebブラウザ画面の中でJavaプログラムの実行をできるようにしたものである。

 

JSPの誕生
サーブレットの問題点

①デザイン修正(Webデザイナー)、プログラムの修正(開発者)で同じソースを触るため、問題が起きやすくなる
②(javaからhtmlの文字列をそのまま書きだす形式だったため)出力されるhtmlが想像しにくい
これら問題点を解決するために、jspが誕生した。・JSPの誕生
jspでは動的に出力したい部分を「<%」,「%>」で括りその内部にJavaプログラムを記述することができる。
このようにJSP内部に書かれたJavaプログラムを「スクリプトレット(Scriplet)」と呼ぶ。
JSPの誕生によって開発者はJavaコード部分に集中し、Webデザイナーはhtmlの部分に集中することができるようになった。

 

●Webアプリケーションフレームワークの時代
サーブレットJSPの問題点
①大規模なアプリケーションをゼロからサーブレットJSPで作成しているとコーティン量が膨大
②開発現場によって独自のライブラリが多くできてしまう
・webアプリケーションフレームワークの誕生
よく使われる処理は「ライブラリ」と呼ばれるプログラム部品として整備されていた。
→これらの考え方をさらに進め、再利用できる部品を増やしてアプリケーションを開発しやすくする土台となったものを「フレームワーク」と呼ぶ。##lesson3 HTTPを知る
・HTTPの知識はなぜ必要か
Webアプリケーションでの不具合が起きた際に、「なぜ起きたのか」などの問題切り分けに大きな役割を果たすため。

●HTTP通信をのぞく
「プロキシサーバー」と呼ばれる仕組みを使い、HTTPリクエストをのぞく。リクエストの1行目をリクエストラインと呼びHTTPリクエストで重要な部分である。
リクエストラインは「メゾッド」、「URI」、「HTTPバージョン」の三つで構成されている。

 

a)メゾッド
リクエストの種類を表す。本書の例では「GET」つまり「URIで指定した内容を送ってください」という意味になっている。
メゾッドには他にも何種類か定義があるが、大半はGETメゾッドによるリクエストである

 

b)URI
例のGETなどのみでは「どの」情報が欲しいかなどの部分が欠けている。そのため、「何が欲しいのか」を表すのが「URI」である。c)HTTPバージョン
HTTPのバージョンを表す。バージョンによって利用できるメソッドの種類やリクエスト・ヘッダーの種類が変わるため、ここでどのバージョンなのかを指定している。2行目以降の残りの部分は「メッセージ・ヘッダー」と呼び、リクエストの付加的な情報を表す。
メッセージ・ヘッダーは各行が<フィールド名>:<フィールド値>という形式で表されている。以下は代表的なヘッダーの意味である。

 

d)Accept
Webクライアントが受け取ることのできるデータの種類を表したもの。データの種類はContent-Typeという形式で表され、
クライアントで受け取ることのできるContent-Typeをコンマ区切りで指定している。ex)テキストファイルを示す「text/plain」、JPEG画像を表す「image/jpeg」e)Accept-Language
Webクライアントが受け取ることのできる自然言語(人間の使用する言葉)の種類を示す。
Accept-Languageヘッダーによって、webサーバーがクライアント使用する言語に合わせたコンテンツを返すといったことができる。
ex)Accept-Language 「ja-JP」

 

f)User-Agent
利用しているWebブラウザの種類やバージョンを示す。
Webサーバーがアクセスしてきたクライアントの種類に応じて適切なコンテンツを返すために利用されている。

 

g)Host
リクエストの送信先ホスト名やポート番号を指定する●コラム
URI、URL(URN)
リソースの位置を指定する為にURLが考え出された。その後、その拡張した概念としてURI(URLにURNを加えたもの)が考え出された。
※URNは使われる機会がめったにない●HTTPレスポンスをのぞくa)ステータスライン
HTTPレスポンスでも1行目、HTTPステータス・ラインが重要となる。HTTPバージョン/ステータスコード/レスポンス・フレーズ の3つで表現され
→HTTP/1.1 200 OK のような形になる・ステータス・コードは、3桁の数字とそれに続くメッセージで表されている。

 

最初の1桁目の数字がカテゴリーを表している。1xx (情報ーリクエストの処理が継続していることを示す)
2xx (成功ーリクエストが成功したことを示す)
3xx (リダイレクションーリクエストを完了させるにはさらに動作が必要であることを表す)
4xx (クライアントエラー -クライアントに起因するエラーによってリクエストが失敗したことを示す)
5xx (サーバ側に起因するエラーのため、リクエスト失敗したことを表す)ex )
200 (OK リクエストが正常に完了した)
302 (Found リクエストされたリソースが一時的に別のURIに属していることを示す。リダイレクトで使用される)
401 (Unauthorized ユーザ認証に失敗したことを示す)
403 (Forbidden アクセス権限なしにより、サーバにリクエストを拒否されたことを示す)
404 (Not Found リクエストに一致するリソースが見つけられなかったことを示す)
500 (Internal ServerError サーバ内部のプログラム実行においてエラーが発生したことを示す)b)メッセージ・ヘッダー
HTTPリクエストのメッセージ・ヘッダーと同じ形式でレスポンスに関する付加的な情報が入っている。c)メッセージ・ボディ
例えばHTMLファイルを要求した場合はHTMLファイルの内容がそのまま入る
JPEG形式の画像ファイルを要求した場合そのデータがそのまま入る。)

 

3.3 情報はどのようにインターネットの大海原を超えるのか

 

●インターネット上の住所・IPアドレス
・URLのホスト名部分は、人間に理解しやすい文字列で表現されているが、実際はインターネットに接続されたコンピュータは「IPアドレス」という数値によって識別されている。
IPアドレスとはピリオドで区切られた4組の数字で表される。●IPアドレスを頼りに情報を届ける TCP/IP
IPアドレスが分かると宛先のホスト名が特定でき、情報を届けることができる。これらの役割を担うのが「TCP/IP」と呼ばれるプロトコルである。
TCP/IPはブラウザなどから受け取ったHTTPリクエストなどの情報を「パケット」という小さな単位に分割して送信し、受け取った側で元のように組み立ててから受け手となるWebサーバなどのアプリケーションへ渡している。つまり
・情報はパケットと呼ばれる単位に分割されて送受信されている
・パケットの送受信はTCP/IPが責任を持って行っている。●IPアドレスは誰が決めるのか
IPアドレス世界中で唯一の値になる必要がある。
これらは特定の団体が管理しており、そこへ申請する必要がある。
しかし、我々私人がインターネットを利用する際にはインターネット・サービス・プロバイダーがまとまった数の確保したIPアドレスの一つをインターネットに接続するたびに一時的に割り当てられている。

 

グローバルIPアドレスとプライベートIPアドレス
・以上のようにして割り振られたインターネット上で唯一のIPアドレスを「グローバルIPアドレス」と呼ぶ。
・インターネットなどほかのネットワーク接続されてないネットワークを「プライベートネットワーク」と呼ぶ。
これを使用するIPを「プライベートIPアドレス」と呼ぶ。クラスA(10.~)、クラスB(172.~)、クラスC(192.
168.~)のように利用可能なアドレスの数によって違う。

 

●コラム
IPアドレスと個人情報
・企業ー「ゲートウェイ」という出入口サーバを通してWebサイトにアクセスする。そのため、アクセス先のWebサーバにはゲートウェイIPアドレスが通知される。そのため個人情報の特定は容易
・個人ーISP経由でインターネットに接続することがほとんどである。ISPでは毎回違うIPアドレスが割り当てられるため、個人を特定するのが難しい。しかし、IPアドレスの割り当て記録はされているため、必要があれば警察に提示されることがありうる。


●ホスト名をIPアドレスに変換するDNS
DNSドメイン名とIPアドレスの対応表を持ったコンピュータ(DNSサーバ)をインターネット上に配置しておき、DNSサーバへの問い合わせればドメイン名に対応するIPアドレスを教えてもらえるという仕組み
//TODO:nslookupのやつできなかった IPのダイレクトが禁止されてるかタイポ?ドメイン名の代わりに直接IPの指定

 

DNSはどのように実現されるか
DNSではドメイン名に対応したDNSサーバを多数用意し、情報を分散管理している。
また、jp,com,net,orgなど最上位のドメインを「トップレベルドメインTLD)」と呼び、TLDDNSサーバーを管理するのが「ルートサーバ」である。

 

●ホスト内の宛先を決定するポート番号
・受信した情報がどのようなプロトコルのものであり、どのようなアプリケーションが処理すべきかをTCP/IPは判断できない。
そこで「ポート」が登場する。TCP/IPによって情報を受け取るアプリケーションは必ず「待ち受けポート」を決めて情報を持つ。
ポートは0~65,535までの数字で表され、複数のアプリケーションが利用することはできない。
よく使われるプロトコルに関するポートは標準で使用するポートを取り決めている。
それらは「ウェル・ノウン・ポート」と呼ばれる。
以下は代表的なものである。
ex)
20,21 -FTP
22 -SSH
23 -Telent
25 -SMTP
53 -DNS
80 -HTTP
110 -POP3
443 -HTTPS3.4 Webサーバへの要求をどのように伝えるか

 


●GETによるパラメータ渡し
「クエリ文字列」ー通常のURLから「?」以降の部分。フォームに入力された文字列などをWebサーバへ渡すために使われる。

 

●アプリケーション側でのパラメータの受け取り

 

●POSTメソッドによるパラメータ渡し
・GETによるパラメータ渡しはURLに情報が含まれるために、①どのような情報をWebサーバに送信したのか第三者に漏洩しやすい。②WebサーバやWebクライアントでは利用できるURLの長さが255文字に制限されているため多くの情報が渡せないなどもある。
そこで「POSTメソッド」によるパラメータ渡しがある。
POSTリクエストの場合、クエリ文字列を使用する代わりにメッセージボディを利用してパラメータを渡す。
これによって、①アドレスバーから第三者への漏洩が減る ②メッセージボディには文字数の制限がないためパラメータの量が多い場合でも問題がなくなる。

 

●GET、POSTどちらを使えばいいか
・GETではURLにパラメーターが含まれるため、パラメーターごと人に伝えることができる。
このように同じ要求を何度も繰り返しても同じ結果が得られることを「副作用がない」と言う。
つまりGETでは「副作用がないこと」を期待する。
・POSTでは前述したようなGETにはない、機密性・(決済処理など)副作用を伴う処理・クエリ文字列に収まりきらない大量の情報などに向いています。

 

●日本語はどのように渡すか
日本語はそのままアドレスバーに入力してしまうと「文字化け」が発生する。
そのため「パーセントエンコード」が使用される。
「パーセントエンコード」とは文字列を文字コードで表したものである。
これらの処理はすべてブラウザ側で自動的に行われるため、基本的には気にする必要はない。