Open zerebom opened 4 years ago
世界共通のコンテンツを送信するためのやり取りの手順をHTTPという。 これにより、世界の様々なブラウザやサーバーに対しても同じ処理をかけることができる。 TCP/IPの一部。Webサーバーの位置・通信方法などはここには記載されていない。
1999年に改定されたHTTP1.1が主流。2015年に改定されたHTTP2もある。
Webブラウザからの要求...HTTPリクエスト Webサーバーからの応答...HTTPレスポンス これが基本的に一対一対応している。
リクエスト時→リクエスト行...どういう処理をして欲しいか書く(情報を取得したい・送信したい等) ex)GET/index.html HTTP/1.1
レスポンス時→ステータス行 ex)HTTP/1.1 200 OK
HEAD...HTTPヘッダーのみを取得 データの更新日時や、サイズのみを知りたい場合に利用する
GET...コンテンツを取得したい場合 データを送信する際はURLにデータを付与して送る。 観閲時に使用頻度が高い
POST...データをWebサーバーに対して送信したい場合 データを送信する際は、メッセージボディ内に組み込まれる。 閲覧履歴に残らないので安全。URLは2083文字と限定されているので大量なデータもこっちを使う。
PUT...コンテンツの書き換え
DELETE...コンテンツの削除
HTTPメッセージの詳細な情報を記載している
以下の三段階によってやりとりが行われる。
この3つが確認できるとHTTP通信が行われ、 その後切断確認のためにまた3ステップ行われる。
再送制御・順序制御があるため高い精度を誇る。
ストリーム 一つのコネクション間に仮想的な通信経路を作る。 これにより、HTTPリクエストの順番通りに応答する必要がなくなった。
バイナリ形式の利用 バイナリ形式のデータをテキストデータに変換することなく利用できる
ヘッダー圧縮 複数の通信がある場合、共有の情報は差分だけ送信するようになった。 この技術をHPACKという
サーバープッシュ HTTPリクエスト内容を元にサーバーが必要なファイルを判別して、 事前にWebサーバーから転送する (つまり、リクエストとレスポンスが一対一じゃなくてもOK)
HTMLはWebコンテンツ用に作られた。 XMLは個別の目的に応じて汎用的に使えるように作られている。 任意の場所にタグづけできるが、文字列しか扱うことができない。\
HTML,XMLを扱う手法(API) 対象となる文書の各要素を抽出し、それらを階層構造として扱う。 BeautifulSoupみたいなやつ。 HTML/XMLの関係を木構造で表したものをDOMツリーと呼ぶ
構造化したデータを表すのに使える。 文字列以外に数値や空を意味するデータを扱うこともできる。
Webサイトなどの更新履歴を配信するためのファイル ブログやニュースサイトで使われていて、サイトを訪問しなくても フィードを見ればOK
RSS 1.0…RDF/2.0...XMLを元に作られた言語。 Atomという形式もある
フィードリーダー Web上のフィードを取得して管理するソフトウェア
ポッドキャスト Webサーバー上に音楽や動画を配信し、RSSを通して公開する手法。
圧縮 データ圧縮にはコーデックというソフトウェアが用いられる。 圧縮をエンコード、解凍をデコードという
ダウンロード配信 Webサーバーからデータをダウンロードしてもらい、それを再生する形式
ストリーミング配信 ファイルを細かく分割し、細切れにしたデータを配信して再生する。 著作権の問題が解決されているが、ストリーミングサーバーを用意する必要がある
Resuful API
メリット
Webアプリケーションの3層構造
3層構造と違い、相互に働きかける。
Webブラウザ
Webサーバからユーザからの情報を受け取り、サーバーサイドプログラムを実行することで データの整形や加工をしたり、データベースのデータの検索加工をし、WEBサーバにかえす。 3層構造で最も高機能。
データを保存する冗長化は以下の3種類がある
ミラーリング データの更新命令を受けたDBMSが複数のデータベースに対して同じ更新をすること
レプリケーション 更新命令を受けてマスタDBMSがスレーブDBMSに更新履歴を送る。 ミラーリングと違い、スレーブの更新はマスタと同時でなくても良い
シェアードディスク データベースを共用の機器にもち、複数のDBサーバーからそれを更新する 他二つと違いDBMSのみが複数ある。
静的コンテンツではリクエストに対するレスポンスを覚えておくことで、 サーバーの負荷を減らすことができる。 リクエストに対するレスポンスの記憶をキャッシュという
コンテンツキャッシュとクエリキャッシュに分かれる
Webブラウザがリクエストを送り、それをサーバーが対応する。。。という流れを同期通信という。 同期通信の欠点を補うためにレンダリングなどのプログラムはJSなどを使ってクライアントサイドスクリプトが直接サーバーとやりとりし、処理してしまおうというのがAjax。 HTMLそのものではなく、必要なデータだけを更新する。また非同期通信もできるようになる。 具体的にはサーバーの応答を待っている間にサーバーに関係ないHTMLの部分の更新などを行うことができる。 Googleのレコメンドなどに使われる
Webを通じてプログラムが直接サービスを利用するときの窓口。 XML -RPC,SOUP,RESTなどが使われている
Webサーバーがクライアントの要求に応じてサーバーサイド・スクリプトを起動するための仕組み。 URLを通じてコマンドライン引数渡しやパス渡しにより変数を渡す。
損失が現実化することをリスクが顕在化する、という
処理できないような大量のアクセスを行うこと
SYN Flood攻撃 TCPのやり取りにおいてSYNパケットだけを大量に送りつけること。 サーバーを接続待ち状態にさせ続ける
F5 攻撃 繰り返しアクセスし続けることで リクエストの反応をできなくする。
ログインしてから利用するようなWebシステムでの CookieやセッションIDを取得し、アクセス済みのユーザとして振る舞い 個人情報を取得すること。 ログインユーザーのIPが急に変わったりしたときに接続を遮断することで回避したりする
Webサーバーのディレクトリを相対パスで指定することで ユーザが入れないようなファイルにアクセスできてしまうこと
攻撃者が虚弱性を持つWebサイトに対してスクリプトを書き込むリンクを表示する。 つまり、ユーザーののWebブラウザに悪意のあるスクリプトを送り込む Cookie情報を公開したり、ウィルスをダウンロードしたりする。
本人になりすましてログインの必要なサイトを操作する。 ユーザのパスワードを指定のものに変えたりなど。
パスワード入力画面などに、SQL文を書くことで DBの判断誤らせること。
ソフトウェア製品の欠陥により、権限がないと本来できないはずの操作が権限がないユーザでもできてしまうこと
セキュリティホールのパッチが配られる前に攻撃を仕掛けること
ファイヤーウォールで防ぎきれない攻撃を防ぐ手段の一つ。 通信の中身まではチェックしない
IDS 異常があったときにシステム管理者に知らせる。
IPS 該当する通信の遮断を行う
シグネチャ型(不正検知型) 登録されたパターンと異なる動きを不正アクセスとみなす。 SYN Flood攻撃などを探知
アノマリー型(異常検知型) 普段の通信と大きく異なる通信などをチェック。 F5攻撃などを検出できる
やり取りされるパケットの中身を見て悪意のあるデータがないかチェックする 高機能だが、高価である
イラスト付きでWebを包括的に説明してくれている参考書
Web 技術とは
Webとは
文書の公開・閲覧のためのシステム ハイパーテキストと呼ばれる言語を表示する。 文書同士をハイパーリンクで繋げる。 一つのドメインにある複数のWebページの集まりをWebサイトという。 コンピュータとユーザーのやり取りを渡す機能をUI、 ソフトウェア同士のやり取りをする機能をAPIという。 ハイパーテキストを記述するための言語をHTMLという。 HTMLで記述された全ての文書をコンテンツという。
WEBサーバーとは
Webブラウザからコンテンツの要求があったときに、必要なコンテンツをネットワークを通してWebブラウザに送信する役割のもの。コンテンツがサーバーによって提供されることでWebコンテンツになる。 ApacheやIISなどが利用されている。 CERNで各国の実験者がすぐに情報にアクセスできるようにするために開発された。
Webアプリケーション・システム・サービスの違い
アプリケーション...WEBを介して人が利用するサービスを提供するもの(具体的なサービス) サービス...プログラムが利用するサービスを提供するもの(API) システム...Webサービスを提供する仕組み(各種サーバ)
URLとは
取得したいWebページをWebブラウザに指定する文字列。 「どのやり取り手順で」「どのWebサーバーに」「なんのコンテンツを」取りに行くかが指定されている。 構造としては左から https://github.com/zerebom/paper-books/issues/19
ドメイン
グローバルIPアドレスの別名。IPは覚えにくいので、こちらがWebサービスの住所として使われる。
DNS(Domain Name System)
ドメインをIPアドレスへと変換してくれる仕組み。 これを提供してくれるサーバをDNSサーバという。 ドメインとIPアドレスを紐づけることを名前解決と呼ぶ。
静的ページ・動的ページ
あらかじめ決められたコンテンツを配信...静的ページ ユーザーの入力を元に、異なる内容を表示...動的ページ
動的ページの仕組み
CGI(Common Gateway Interface)
Webサーバーがブラウザからの要求に応じてプログラムを起動させるための仕組み。
動的ページはURL->CGI->HTML生成という形で作られる
サーバーサイドスクリプト
CGIから呼び出されるスクリプト
インターネットとは
各地のコンピューター同士をネットワークでつなげたいという思いで、ARPAがARPANETを開発。 通信方式と、世界各地の拠点との接続という改良によりインターネットが普及した。 インターネットサービスプロバイダーが提供するサービスを利用することで接続できる。
全体像
インターネットはインターネットプロバイダー(ISP)同士が階層構造でつながっている。 1次プロバイダー...海外同士・IX(インターネット・エクスチェンジ)がつながっている 2次プロバイダー 3次プロバイダー
クライアント/サーバーシステム
Webなどのサービスを提供する...サーバー サービスを利用する...クライアント
Webの標準化
W3C
WEBの生みの親、ティム・バーナーズ=リーが創設した団体。 HTML,CSS,XML,XHTMLの標準化を行っている
Webの設計思想
RESTful(REpresentational State Trasfer)
4つの原則からなるシンプルな設計をさす。 前回のやり取り結果のような情報を持たない(=ステートレス) 以下原則。
統一インターフェース あらかじめ定義・共有された方法で情報がやり取りされる (WebならHTTPなど)
アドレス可能性 全ての情報が一意なURLの構文で示される
接続性 やり取りされる情報にはリンクを含めることができる
ステートレス性 やりとりは1回ごとに完結する
セマンティックWeb
Webページの情報に意味を付け加えたもの。 セマンティックWebではHTML->XMLと言語が変わる。 検索の精度を上げたりできるが、メタデータの付与の作業量が多く普及は遠い。
プロトコル
TCP/IP
インターネットにおける様々なサービスを実現するためのプロトコルの集まり。 OS・機種・デバイスに関係なく通信できるのはTCP/IPのおかげ。 レイヤーが以下のように分かれている
TCP
送信側・受信側で互いに確認を取りながら通信を行うコネクション型
UDP
確認を取らないコネクションレス型
IPアドレス
インターネットに接続されたコンピュータを特定しデータの行き先を管理する識別番号
ポート番号
コンピュータが提供するサービスを指定する識別番号 HTTPは80番。 0~1023がウェルノウンポート 1024~49151がレジスタードポート 49152~65535がダイナミックポート