読者になるxxxさんの備忘録xxさんのブログです.xxさんはネカマです.2020-02-04「プロになるためのWeb技術入門」lesson1-3まで読んだ人に勧められたのでとりあえず、「プロになるためのWeb技術入門」を読んでます。・Webサーバーとクライアント・wwwによるハイパーテキストの公開と閲覧は「Webサーバー」と「Webクライアント」というソフトウェアで成り立っている。wwwでは、webサーバーがネットワーク上に公開するハイパーテキスト(htmlの形式ファイル)を蓄積し、webクライアントの要求にしたがって必要なHTMLファイルを渡す仕組みになっている。・一般的にクライアントからサーバーに対する要求を「リクエスト」、サーバーからクライアントに対する応対を「レスポンス」と呼ぶ。・現在webサーバー用のソフトウェアとして、「Apache」や「IIS」(cf.「nginx」)などが利用されている。●なぜクライアントとサーバーに分けるのか・wwwのように様々なコンテンツを不特定多数の人にコンテンツを公開するには、コンテンツをできるだけ一か所にまとめておいたほうが(更新などの)管理が楽になるため。そのため、wwwを実現するにはWebサーバーのように1つのコンピュータに情報を管理する・wwwでは多くの人が自由にコンテンツを閲覧できなければならない。そのため、利用者の手元にあるPCをWebクライアントとして利用できるようにした。-リソース(資源)の位置を指し示す統一的な記述方法スキーム、ホスト名、パス名で構成される。ファイルシステムのなかのファイルやディレクトリを参照するためのスキームb)ホスト名リソースが存在するホスト(コンピューター)名を示す。ネットワークに接続され他のコンピューターからのリクエストを受け取り結果を返すものをホストコンピューターと呼ぶ。ホスト名にはローカル名と親ドメイン名に分けられる。組織のなかのコンピューターにつけられた名前c)パス名ホスト名で指定されたリソースの位置を示す●HTTPサーバーとクライアントがやりとりするためには通信を行うための取り決めを「通信プロトコル」とよぶ。HTMLの転送に適したプロトコルを「HTTP」(他のプロトコルと比べてシンプルかつ実装が簡単である)と呼ぶ。1996年、HTTP/1.0現在はHTTP/1.1普及している。●コラム以上の規約・仕様はインターネット上に公開されておりRFCと呼ばれる。●CGIの誕生・静的コンテンツへの要求~CGIの誕生サーバーは元々用意されていたコンテンツをクライアントからのリクエストに応じて返していた。Webサーバー上で動作するプログラムを作成し、そのプログラムが人間の代わりにコンテンツを生成することを考え出した。動的コンテンツープログラムによって生成されたHTMLをはじめとするコンテンツ静的コンテンツー従来のようにあらかじめ用意されたコンテンツ動的なコンテンツを生成してWebクライアントに渡すにはWebサーバとコンテンツを生成するプログラムとの連携が必要である。Interface)」という仕組みを考え出した。ーCGIではWebサーバがクライアントから受け取ったリクエストをWebサーバ上に動作するプログラムへ渡す。プログラムはリクエストを参照してHTMLを生成し、Webサーバーに返した。これらのコンテンツを生成する目的で活用されたのが「Perl」や(大規模なものや高速性が求められるもの)「C」であった。・Webの爆発的な普及CGIの普及によって「検索サイト」、「掲示板システム」、「ショッピングサイト」などを提供するサイトが実現できるようになった。・サーブレットの登場1開発言語の問題、2性能の問題の二点の問題が浮上した。1大規模化、複雑化によって当時主に使われていたPerlが、テキスト処理を得意としていたために大規模なアプリケーションの開発を得意としていなかった。オブジェクト指向プログラミングも取り入れられていなかった。2Webブラウザからリクエストが届くたびにCGIを通してプロセスを起動していた。これらには時間がかかりすぎ処理が追い付かなくなった。Java/サーブレットの誕生この時期に登場したのが「Java」である。・(マルチスレッド・セキュリティ・ネットワーク通信など当時重要性が増していた技術が標準であった)といった利点から多くの開発者に受け入れられたJava自体はWebアプリケーションのために開発された言語ではなかったため、JavaEEの一部として「サーブレット」というWebアプリケーション開発をサポートするための機能が提供されるようになった。「サーブレット」とは、JavaでつくられたHTMLなどのWebコンテンツを生成するプログラムのことを指す。Webサーバーと同じプロセスを毎回起動することなく、比較的高速に動作する利点があった。・Javaでアプリケーションを開発する利点Javaには特定のOSやハードウェアに依存せずに動作する。「JavaVM」と呼ばれる仮想のコンピューター言語にコンパイルして実行するためである。サーブレットの場合「Webコンテナ」の設置が難しいなどの点もあります。cf.JavaアプレットJavaアプレットはWebブラウザ画面の中でJavaプログラムの実行をできるようにしたものである。→1デザイン修正(Webデザイナー)、プログラムの修正(開発者)で同じソースを触るため、問題が起きやすくなる2(javaからhtmlの文字列をそのまま書きだす形式だったため)出力されるhtmlが想像しにくいこれら問題点を解決するために、jspが誕生した。・JSPの誕生jspでは動的に出力したい部分を「<%」,「%>」で括りその内部にJavaプログラムを記述することができる。このようにJSP内部に書かれたJavaプログラムを「スクリプトレット(Scriplet)」と呼ぶ。JSPの誕生によって開発者はJavaコード部分に集中し、Webデザイナーはhtmlの部分に集中することができるようになった。・サーブレットやJSPの問題点1大規模なアプリケーションをゼロからサーブレットやJSPで作成しているとコーティン量が膨大2開発現場によって独自のライブラリが多くできてしまう・webアプリケーションフレームワークの誕生よく使われる処理は「ライブラリ」と呼ばれるプログラム部品として整備されていた。→これらの考え方をさらに進め、再利用できる部品を増やしてアプリケーションを開発しやすくする土台となったものを「フレームワーク」と呼ぶ。HTTPを知る・HTTPの知識はなぜ必要かWebアプリケーションでの不具合が起きた際に、「なぜ起きたのか」などの問題切り分けに大きな役割を果たすため。●HTTP通信をのぞく「プロキシサーバー」と呼ばれる仕組みを使い、HTTPリクエストをのぞく。リクエストの1行目をリクエストラインと呼びHTTPリクエストで重要な部分である。リクエストラインは「メゾッド」、「URI」、「HTTPバージョン」の三つで構成されている。a)メゾッドリクエストの種類を表す。本書の例では「GET」つまり「URIで指定した内容を送ってください」という意味になっている。メゾッドには他にも何種類か定義があるが、大半はGETメゾッドによるリクエストであるb)URI例のGETなどのみでは「どの」情報が欲しいかなどの部分が欠けている。そのため、「何が欲しいのか」を表すのが「URI」である。c)HTTPバージョンHTTPのバージョンを表す。バージョンによって利用できるメソッドの種類やリクエスト・ヘッダーの種類が変わるため、ここでどのバージョンなのかを指定している。2行目以降の残りの部分は「メッセージ・ヘッダー」と呼び、リクエストの付加的な情報を表す。メッセージ・ヘッダーは各行が<フィールド名>:<フィールド値>という形式で表されている。以下は代表的なヘッダーの意味である。d)AcceptWebクライアントが受け取ることのできるデータの種類を表したもの。データの種類はContent-Typeという形式で表され、クライアントで受け取ることのできるContent-Typeをコンマ区切りで指定している。ex)テキストファイルを示す「text/plain」、JPEG画像を表す「image/jpeg」e)Accept-LanguageWebクライアントが受け取ることのできる自然言語(人間の使用する言葉)の種類を示す。Accept-Languageヘッダーによって、webサーバーがクライアント使用する言語に合わせたコンテンツを返すといったことができる。「ja-JP」f)User-Agent利用しているWebブラウザの種類やバージョンを示す。Webサーバーがアクセスしてきたクライアントの種類に応じて適切なコンテンツを返すために利用されている。g)Hostリクエストの送信先ホスト名やポート番号を指定する●コラムURI、URL(URN)リソースの位置を指定する為にURLが考え出された。その後、その拡張した概念としてURI(URLにURNを加えたもの)が考え出された。※URNは使われる機会がめったにない●HTTPレスポンスをのぞくa)ステータスラインHTTPレスポンスでも1行目、HTTPステータス・ラインが重要となる。ような形になる・ステータス・コードは、3桁の数字とそれに続くメッセージで表されている。最初の1桁目の数字がカテゴリーを表している。リクエストされたリソースが一時的に別のURIに属していることを示す。サーバ内部のプログラム実行においてエラーが発生したことを示す)b)メッセージ・ヘッダーHTTPリクエストのメッセージ・ヘッダーと同じ形式でレスポンスに関する付加的な情報が入っている。c)メッセージ・ボディ例えばHTMLファイルを要求した場合はHTMLファイルの内容がそのまま入る(JPEG形式の画像ファイルを要求した場合そのデータがそのまま入る。情報はどのようにインターネットの大海原を超えるのか●インターネット上の住所・IPアドレス・URLのホスト名部分は、人間に理解しやすい文字列で表現されているが、実際はインターネットに接続されたコンピュータは「IPアドレス」という数値によって識別されている。IPアドレスとはピリオドで区切られた4組の数字で表される。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.~)のように利用可能なアドレスの数によって違う。ゲートウェイ」という出入口サーバを通してWebサイトにアクセスする。そのため、アクセス先のWebサーバにはゲートウェイのIPアドレスが通知される。・個人ーISP経由でインターネットに接続することがほとんどである。ISPでは毎回違うIPアドレスが割り当てられるため、個人を特定するのが難しい。IPアドレスの割り当て記録はされているため、必要があれば警察に提示されることがありうる。●DNSはどのように実現されるかDNSではドメイン名に対応したDNSサーバを多数用意し、情報を分散管理している。jp,com,net,orgなど最上位のドメインを「トップレベルドメイン(TLD)」と呼び、TLDのDNSサーバーを管理するのが「ルートサーバ」である。・受信した情報がどのようなプロトコルのものであり、どのようなアプリケーションが処理すべきかをTCP/IPは判断できない。そこで「ポート」が登場する。TCP/IPによって情報を受け取るアプリケーションは必ず「待ち受けポート」を決めて情報を持つ。ポートは0~65,535までの数字で表され、複数のアプリケーションが利用することはできない。使われるプロトコルに関するポートは標準で使用するポートを取り決めている。それらは「ウェル・ノウン・ポート」と呼ばれる。以下は代表的なものである。Webサーバへの要求をどのように伝えるか●GETによるパラメータ渡し「クエリ文字列」ー通常のURLから「?」以降の部分。フォームに入力された文字列などをWebサーバへ渡すために使われる。●アプリケーション側でのパラメータの受け取り●POSTメソッドによるパラメータ渡し・GETによるパラメータ渡しはURLに情報が含まれるために、1どのような情報をWebサーバに送信したのか第三者に漏洩しやすい。2WebサーバやWebクライアントでは利用できるURLの長さが255文字に制限されているため多くの情報が渡せないなどもある。そこで「POSTメソッド」によるパラメータ渡しがある。POSTリクエストの場合、クエリ文字列を使用する代わりにメッセージボディを利用してパラメータを渡す。2メッセージボディには文字数の制限がないためパラメータの量が多い場合でも問題がなくなる。●GET、POSTどちらを使えばいいか・GETではURLにパラメーターが含まれるため、パラメーターごと人に伝えることができる。このように同じ要求を何度も繰り返しても同じ結果が得られることを「副作用がない」と言う。GETでは「副作用がないこと」を期待する。・POSTでは前述したようなGETにはない、機密性・(決済処理など)副作用を伴う処理・クエリ文字列に収まりきらない大量の情報などに向いています。●日本語はどのように渡すか日本語はそのままアドレスバーに入力してしまうと「文字化け」が発生する。そのため「パーセントエンコード」が使用される。「パーセントエンコード」とは文字列を文字コードで表したものである。これらの処理はすべてブラウザ側で自動的に行われるため、基本的には気にする必要はない。不正アクセス行為の禁止等に関する法律(補訂第二版)』を...2021-08-25awsのsaaを取りました。awsのsaaを取りました。7はてなブログをはじめよう!fallakiakino_793さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。