SlideShare a Scribd company logo
Copyright © 2021 ethan All Rights Reserved.
HTTPとは
Hypertext Transfer Protocol (HTTP) は HTML などのハイパーメディア文書を転送するための
アプリケーション層プロトコルです。
Copyright © 2021 ethan All Rights Reserved.
HTTPの概要
HTTP は、 HTML 文書などのリソースを取り出すことを可能にするプロトコルです
Copyright © 2021 ethan All Rights Reserved.
HTTPベースシステムの構成要素
HTTP はクライアントサーバープロトコルであり、
リクエストはクライアント (または代理のプロキシ) というひとつの実体から送信されます。
ほとんどの場合、クライアントはウェブブラウザーです。
個々のリクエストはサーバーに送信され、処理した後にレスポンスと呼ばれる回答を提供します。
クライアントとサーバーとの間には、例えばゲートウェイやキャッシュなどの様々な操作を行う、まとめてプロキシサーバー
と呼ばれるいくつもの実体が存在しています。
プロキシ:
・キャッシュ (キャッシュは共用、あるいはブラウザーキャッシュのように個人用にできます)
・フィルタリング (アンチウィルススキャンやペアレンタルコントロールなど)
・負荷分散 (複数のサーバーが別々のリクエストに対応できるようにする)
・認証 (さまざまなリソースへのアクセスを制御する)
・ログ記録 (履歴情報の保管を可能にする)
Copyright © 2021 ethan All Rights Reserved.
HTTPの基本方針
▼シンプル
全体的にシンプルで人間が読んで理解できるように設計されている。
▼拡張可能
HTTP ヘッダーによって、プロトコルの拡張や実験が容易になっています
▼ステートレスであるがセッションレスではない
ステートフル:状況によって、あるリクエストをしたら、レスポンス (対応や反応、応答内容等) が変わるもの。
ステートレス:状況によらず、あるリクエストをしたら、必ず同じ結果になるもの。
▼HTTPとコネクション
Connection ヘッダーを使用して、下層の TCP コネクションを部分的に制御できます。 HTTP/2 はひとつのコネクションで複
数のメッセージを多重化するように進化しました。コネクションををウォーム状態に保つのに役立ち、効率が向上します。
Copyright © 2021 ethan All Rights Reserved.
HTTPが制御できること
HTTP で制御できる一般的な機能は以下のとおりです。
キャッシュ
文書をどのようにキャッシュするかを、 HTTP で制御できます。サーバーはプロキシやクライアントに対して、何をどれだけの間キャッシュするかを指示できます。ク
ライアントは中間のキャッシュプロキシに対して、保存されている文書を無視するよう指示できます。
オリジン制約の緩和
のぞき見や他のプライバシー侵害を避けるため、ウェブブラウザーはウェブサイト間を厳密に分割するよう強制しています。同一オリジンのページだけが、ウェブペー
ジの情報すべてにアクセスできます。この制約はサーバーにとって負担になりますが、 HTTP ヘッダーでサーバー側の厳密な分割を緩和できます。これにより、さまざ
まなドメインを情報源とした情報の寄せ集めの文書を作成できます。ただし、このようにするセキュリティ上の理由があります。
認証
特定のユーザーしかアクセスできないように保護されたページがあるでしょう。基本的な認証は HTTP が提供しており、 WWW-Authenticate などのヘッダーを使用す
るか、 HTTP Cookie を使用した特別なセッションを設定するかします。
プロキシとトネリング
サーバーやクライアントがイントラネット内に配置されて、他のコンピューターから本当の IP アドレスが見えなくなっていることがよくあります。このネットワーク
境界を渡るため、 HTTP リクエストはプロキシを通過します。すべてのプロキシが HTTP プロキシであるとは限りません。たとえば、 SOCKS プロトコルはより低い
層で動作します。ほかにも FTP などがそれらのプロキシで処理されることがあります。
セッション
HTTP Cookie を使用して、リクエストとサーバーのセッションを関連付けできます。これにより HTTP がステートレスプロトコルであるにもかかわらず、セッション
を作成できます。これは電子商取引のショッピングバスケットだけでなく、出力内容にユーザー設定を適用できるサイトでも有用です。
Copyright © 2021 ethan All Rights Reserved.
HTTPのフロー
クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、
クライアントは以下の段階を踏みます。
Copyright © 2021 ethan All Rights Reserved.
HTTPのフロー(1)TCPコネクションを開く
クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、
クライアントは以下の段階を踏みます。
(1)TCP コネクションを開く:
TCP コネクションはひとつまたは複数のリクエストを送信したり、
回答を受け取ったりするために使用します。
クライアントは新しいコネクションを開く、既存のコネクション
を再使用する、あるいはサーバーに対して複数の TCP コネクショ
ンを開くことができます。
Copyright © 2021 ethan All Rights Reserved.
HTTPのフロー(2) HTTP メッセージを送信する
クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、
クライアントは以下の段階を踏みます。
(2) HTTP メッセージを送信する:
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
Copyright © 2021 ethan All Rights Reserved.
HTTPのフロー(3)サーバーから送信されたレスポンスを読み取る
クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、
クライアントは以下の段階を踏みます。
(3)サーバーから送信されたレスポンスを読み取る:
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (ここに、リクエストした 29769 バイトのウェブページがある)
Copyright © 2021 ethan All Rights Reserved.
HTTPのフロー(4)次のリクエストのために、コネクションを閉じるか再使用する
クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、
クライアントは以下の段階を踏みます。
(4)次のリクエストのために、コネクションを閉じるか再使用する:
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ-リクエスト
HTTP メッセージはリクエストとレスポンスの 2 種類あり、それぞれ固有の形式になっています。
HTTP リクエストの例です。 リクエストは以下の要素で構成されます。
▼HTTP メソッド:
通常、クライアントが実行したい操作を定義する GET や POST
のような動詞か、OPTIONS や HEAD のような名詞です。一般
的にクライアントはリソースを取り込む (GET を使用) か HTML
フォーム の値を送信する (POST を使用) ことを望みますが、場
合によってはほかの操作が必要になります。
▼取り込むリソースのパス:
状況から明らかであればリソースの URL はこの要素から取り除
かれます。たとえばプロトコル (http://)、ドメイン (ここでは
developer.mozilla.org)、TCP ポート (ここでは 80) が取り除か
れます。
▼HTTP プロトコルのバージョン:
サーバーに追加の情報を与える任意の ヘッダー。
POST のようなメソッドではレスポンスと同様に、送信するリ
ソースを包含したボディがあります。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ-レスポンス
HTTP メッセージはリクエストとレスポンスの 2 種類あり、それぞれ固有の形式になっています。
レスポンスの例です。
レスポンスは以下の要素で構成されます。
▼準拠する HTTP プロトコルのバージョン:
▼ステータスコード:
リクエストが成功したか否か、およびその理由を示しま
す。
▼ステータスメッセージ:
ステータスコードの簡単な説明ですが、権威はありませ
ん。
▼リクエストと同様の HTTP ヘッダー
▼リソースを含む本文
Copyright © 2021 ethan All Rights Reserved.
HTTP基づくAPI
最もよく使われている HTTP に基づく API は XMLHttpRequest API で、
ユーザーエージェントとサーバーの間でデータを交換するために使用することができます。
新しい Fetch API は、同じ機能をより強力で柔軟な一連の機能で提供します。
他の API、 server-sent event は、
サーバーがクライアントにイベントを送信することができる一方通行のサービスで、
HTTP をトランスポートの仕組みとして利用しています。
クライアントのブラウザーは HTTP ストリームに届くメッセージを自動的に適切な Event オブジェクトに変換し、
もしイベントの型が分かればその型に登録されているイベントハンドラーに配信し、
型に対してイベントハンドラーが設定されていない場合は、 onmessage イベントハンドラーに配信します。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ
過去に取得したリソースを再使用すると、ウェブサイトやアプリケーションのパフォーマンスが大きく向上するでしょう。
ウェブキャッシュは遅延やネットワークのトラフィックを削減して、リソースを表示するために必要な時間も短縮します。
HTTP キャッシュを使用すると、ウェブサイトの応答性が高まります。
キャッシュは、提供されたリソースの複製を保存して、要求されたときに背後でその複製を提供する技術です。ウェブキャッシュのストア内に要求されたリソースがあるとき、キャッ
シュはリクエストに介入して、提供元のサーバーから再びダウンロードする代わりにキャッシュ内の複製を返します。これにより、サーバーがすべてのクライアントに応対する必要が
なくなり負荷が軽減する、キャッシュがクライアントに近いところにあるのでパフォーマンスが向上する、すなわちリソースを返すためにかかる時間を短くするといったことを実現で
きます。ウェブサイトについて、高いパフォーマンスを達成するための主要な構成要素です。一方、すべてのリソースを同じまま永久に保存しないよう、キャッシュを適切に設定しな
ければなりません。キャッシュはあまり長く保存せず、リソースが変更されるまでの間にすることが重要です。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- さまざまな種類のキャッシュ
キャッシュにはさまざまな種類があり、これらはプライベートキャッシュと共有キャッシュの 2 つのカテゴリーに大きく分類
できます。共有キャッシュは複数のユーザーが再使用するためにレスポンスを保存するキャッシュです。
プライベートキャッシュはひとりのユーザーのためのキャッシュです。
このページでは主にブラウザーのキャッシュとプロキシのキャッシュを扱いますが、ウェブサイトやウェブアプリケーション
の信頼性、パフォーマンス、規模を向上するためにウェブサーバーで展開されるゲートウェイのキャッシュ、CDN、リバース
プロキシのキャッシュ、ロードバランサーも存在します。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- プライベートなブラウザのキャッシュ
プライベートキャッシュは、ひとりのユーザーのためのキャッシュです。
ブラウザーの設定で "キャッシュ" を見たことがあるでしょう。
ブラウザーのキャッシュは、ユーザーが HTTP でダウンロードしたすべての文書を保持します。
このキャッシュは訪問済みの文書で、サーバーと追加のやり取りを行う必要なしに戻る/進む操作、ページの保存、ソースの
表示などを可能にします。また同様に、キャッシュ済みコンテンツのオフライン表示が改善します。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- 共有されるプロキシキャッシュ
共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気
があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一
部としてウェブプロキシを設置しているでしょう。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- 共有されるプロキシキャッシュ
共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気
があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一
部としてウェブプロキシを設置しているでしょう。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- キャッシュ処理の対象
HTTP キャッシュは必須ではありませんが、キャッシュしたリソースの再使用は通常望ましいことです。
ただし一般的な HTTP キャッシュはたいてい、GET のレスポンスのみキャッシュするよう制限されており、他のメソッドで
はキャッシュしません。
主要なキャッシュのキーはリクエストメソッドと対象 URI で構成されます (GET リクエストだけをキャッシュの対象にするた
め、URI しか使用されないことがよくあります)。キャッシュ項目の一般的な形式は以下のとおりです。
・取得要求に成功した結果:
GET リクエストに対する 200 (OK) レスポンスには、HTML 文書、画像、ファイルなどのリソースが含まれています。
・恒久的なリダイレクト:
301 (Moved Permanently) レスポンス。
・エラーレスポンス:
404 (Not Found) のページ。
・不完全な結果:
206 (Partial Content) レスポンス。
・キャッシュのキーとして使用することが適切であると定義されていれば、GET 以外のレスポンス。
Copyright © 2021 ethan All Rights Reserved.
HTTPキャッシュ- キャッシュイメージ
Copyright © 2021 ethan All Rights Reserved.
HTTPCookieの使用
Cookie は主に、以下の 3 つの用途で使用されます。
▼セッション管理:
ログイン、ショッピングカート、ゲームのスコア、またはその他のサーバーが覚えておくべきもの
▼パーソナライゼーション:
ユーザー設定、テーマ、その他の設定
▼トラッキング:
ユーザーの行動の記録及び分析
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ -HTTPリクエスト –開始行
HTTP リクエストは、アクションを始めるためにクラアントからサーバーへ送られます。その開始行には、3 つの要素が含ま
れています。
▼(1)HTTPメソッド:
・GET:データを取り込むこと
・HEAD:GETリクエストを同じレスポンスを求めるが、レスポンス本文はない。
・POST:データをサーバーへ送信すること。
・PUT:対象リソースの現在の表現の全体をリクエストのペイロードで置き換える。
・DELETE:指定したリソースを削除する
・CONNECT:対象リソースで識別されるサーバーとの間にトンネルを確立する。
・OPTION:対象リソースの通信オプションを示すために使用する。
・TRAEC:対象リソースへのパスに沿ってメッセージのループバックテストを実行する。
・PATCH:リソースを部分的に変更するために使う
▼(2)リクエスト対象:
通常は URL ですが、プロトコル、ポート、ドメインの絶対パスは通常、リクエストの状況から明らかにされます。リクエスト対象の形式は、HTTP メソッドにより異
なります。
▼(3)HTTPバージョン:
メッセージの残りの部分の構造を定義しており、レスポンスで使用することを想定しているバージョンを示す役割もあります。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ -HTTPリクエスト –ヘッダー
リクエストの HTTP ヘッダー は、HTTP ヘッダーの一定の基本構造に従います。大文字・小文字を区別しない文字列の後に
コロン (':') と、ヘッダーに応じた構造の値が続きます。値を含むヘッダー全体は 1 行で構成されており、とても長くなる場合
もあります。
使用できるリクエストヘッダーは多数あります。これらはいくつかのグループに分類されます。
▼一般ヘッダーは、 Via など、メッセージ全体に適用されるものです。
▼リクエストヘッダーは、 User-Agent, Accept-Type, 指定するとリクエストを変更するもの (Accept-Language など)、状況
を示すもの (Referer など)、条件を与えるもの (If-None など) があります。
▼エンティティヘッダーは Content-Length など、リクエストの本文に適用されます。当然ながら、リクエスト内に本文がな
い場合はこれらのヘッダーが送信されません。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ -HTTPリクエスト –本文
リクエストの最後の部分が本文です。本文が存在しないリクエストもあります。リソースを取り込むリクエストである GET,
HEAD, DELETE, OPTIONS は通常、本文は不要です。サーバー内のデータを更新するためにデータを送信するリクエストもあ
り、 POST リクエストでよくあります (HTML フォームのデータを持つ)。
本文は、大きく 2 種類に分類されます。
▼単一リソースの本文:
1 個のファイルで構成され、Content-Type と Content-Length の 2 つのヘッダーで定義されます。
▼複数リソースの本文:
マルチパートの本文で構成され、それぞれが異なる情報を持ちます。これは主に、 HTML フォームと関連付けられます。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ –HTTPレスポンス –ステータス行
HTTP レスポンスの開始行はステータス行と呼ばれ、以下の情報を持ちます。
プロトコルバージョン。通常 HTTP/1.1 です。
ステータスコード。リクエストが成功したか失敗したかを示します。一般的なステータスコードは 200, 404, 302 です。
ステータス文字列。手短な単なる情報ですが、人間が HTTP メッセージを理解するのを助けるために、ステータスコードをテ
キストで説明します。
一般的に、ステータス行は HTTP/1.1 404 Not Found. のようになります。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ –HTTPレスポンス –ヘッダー
レスポンスの HTTP ヘッダーは、他のヘッダーと同様に一定の基本構造に従います。大文字・小文字を区別しない文字列の後
にコロン (':') と、ヘッダーの種類に応じた構造の値が続きます。値を含むヘッダー全体は 1 行で構成されます。
使用できるレスポンスヘッダーは多数あります。これらはいくつかのグループに分類されます。
一般ヘッダーは Via など、メッセージ全体に適用されるものです。
レスポンスヘッダーは Vary や Accept-Ranges など、ステータス行で伝えられないサーバーの追加情報を与えます。
エンティティヘッダーは Content-Length など、レスポンスの本文に適用されます。通常、レスポンス内に本文がない場合は
このようなヘッダーは送信されません。
Copyright © 2021 ethan All Rights Reserved.
HTTPメッセージ –HTTPレスポンス –本文
レスポンスの最後の部分が本文です。本文を持たないレスポンスもあります。 201 Created や 204 No Content といったス
テータスコードのレスポンスは通常、本文がありません。
本文は、大きく 3 種類に分類されます。
大きさが判明している 1 個のファイルで構成される、単一リソースの本文。 Content-Type と Content-Length の 2 つのヘッ
ダーで定義されます。
大きさが不明な 1 個のファイルで構成される、単一リソースの本文。 Transfer-Encoding を chunked に設定して、 chunked
形式でエンコードされます。
複数リソースの本文。マルチパートの本文で構成され、それぞれが異なる情報のセクションを持ちます。これは比較的まれで
す。
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション-コネクションの確立
クライアントサーバープロトコルでは、クライアントがコネクションを確立します。HTTP のコネクションを開くとは、下層
のトランスポート層のコネクションを確立することであり、これは通常 TCP です。
コンピューター上の HTTP サーバー用の、 TCP の既定のポートは 80 番です。8000 番や 8080 番など、ほかのポートを使用
することもできます。読み込むページの URL はドメイン名とポート番号の両方を含みますが、後者は 80 番である場合に省略
できます。
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション- クライアントの要求の送信
コネクションを確立すると、ユーザーエージェントは要求を送信できます。
クライアントの要求は CRLF (キャリッジリターンに続いてラインフィード) で区切られたテキストのディレクティブで構成さ
れ、3 つのブロックに分けられます。
▼最初の行は、要求メソッドの後に次の引数が続きます。
・文書のパス、すなわち絶対 URL からプロトコル名とドメイン名を除いたものです。
・HTTP プロトコルのバージョン。
▼後続の行は HTTP ヘッダーであり、サーバーに対してどの種類 (例えば、言語や MIME タイプ) のデータが適切かを示す情
報や、サーバーの動作を変える (例えば、すでにキャッシュされている場合は回答を送信しない) データを与えます。これらの
HTTP ヘッダーは空行で終わるブロックを構成します。
▼最後のブロックは省略可能なデータブロックで、主に POST メソッドで使用される追加のデータを含みます。
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション- 要求の例
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
developer.mozilla.org のルートページ、すなわち
http://developer.mozilla.org/ を読み込む、また可能
であればユーザーエージェントはフランス語のページ
を希望することをサーバに伝えます
POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded
name=Joe%20User&request=Send%20me%20one%
20of%20your%20catalogue
ヘッダーブロックとデータブロックを分けている、最
後の空行に注意してください。この例は HTTP ヘッ
ダーに Content-Length がありませんので、空のデー
タブロックが与えられてヘッダーの終わりを示してお
り、サーバーはこの空行を受け取るとただちに要求を
処理できます。
フォームの入力結果を送信する例です。
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション- 要求メソッド
HTTP では、リソースに対して実行したいアクションを示す要求メソッドのセットを定義しています。
要求メソッドには名詞も存在しますが、 HTTP 動詞と言われることがあります。
GET と POST が最も一般的です。
GET メソッドは、指定したリソースのデータを要求します。
GET を使用する要求は、データの取り込みに限ります。
POST メソッドはサーバーにデータを送信しますので、データの状態を変更できます。
これは、 HTML フォーム用によく使用されるメソッドです。
Copyright © 2021 ethan All Rights Reserved.
典型的なHTTPセッション- サーバー応答の構造
接続したクライアントが要求を送信すると、
ウェブサーバーはその要求を処理して、
最終的に応答を返信します。
クライアントの要求と同様にサーバーの応答は
テキストのディレクティブで構成され、
それらは CRLF で区切られており、3 つのブロックに分けられます:
最初の行はステータス行で、
受け入れた HTTP バージョンとステータス要求で構成されます
(そして、人間に読めるテキストで意味を簡単に示します)。
後続の行はそれぞれ具体的な HTTP ヘッダーを表しており、
クライアントに対して送信したデータに関する情報
(例えば種類、サイズ、圧縮方法、キャッシュ情報) を与えます。
クライアントの要求の HTTP ヘッダーブロックと同様に、
これらの HTTP ヘッダーも空行で終わるブロックを構成します。
最後のブロックはデータブロックで、任意のデータを含みます。
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html...
(ここにサイズが 29769 バイトの、要求された
ウェブページが置かれます)
Copyright © 2021 ethan All Rights Reserved.
fin
Copyright © 2021 ethan All Rights Reserved.
文献
▼ MDN web Docs – HTTP チュートリアル
https://developer.mozilla.org/ja/docs/Web/HTTP
▼ MDN web Docs – HTTPの概要
https://developer.mozilla.org/ja/docs/Web/HTTP/Overview
▼ MDN web Docs – HTTPキャッシュ
https://developer.mozilla.org/ja/docs/Web/HTTP/Caching
▼ MDN web Docs – HTTPのcookieの使用
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
▼ MDN web Docs – HTTPメッセージ
https://developer.mozilla.org/ja/docs/Web/HTTP/Messages
TCP/IP model Protocol and services OSI model
Application
Transport
Network
Network
Interface
Application
Transport
Network
Physical
Session
Data Link
Presentation
HTTP, FTTP,
Telnet,NTP,
DHCP,PING
TCP,UDP
IP,ARP,ICMP,IGMP
Ethernet

More Related Content

Similar to About http

ゆるべん Webアプリ開発概要 20130127
ゆるべん Webアプリ開発概要 20130127ゆるべん Webアプリ開発概要 20130127
ゆるべん Webアプリ開発概要 20130127Y
 
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
CLOUDIAN KK
 
サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901Masayuki Abe
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソースEnpel
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
Yukio Saito
 
Lesson01
Lesson01Lesson01
Lesson01MRI
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
Sho A
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
Node.js+MongoDB in SPA
Node.js+MongoDB in SPANode.js+MongoDB in SPA
Node.js+MongoDB in SPA
Naoki Sasaki
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
yoshikawa_t
 
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしいIBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
K Kimura
 
Comparing GlusterFS Swift API to Native Swift
Comparing GlusterFS Swift API to Native SwiftComparing GlusterFS Swift API to Native Swift
Comparing GlusterFS Swift API to Native SwiftEtsuji Nakai
 
勉強会 Vol1 『ホスティングとは?』
勉強会 Vol1 『ホスティングとは?』勉強会 Vol1 『ホスティングとは?』
勉強会 Vol1 『ホスティングとは?』
chimoto
 
HTTPの仕組みについて
HTTPの仕組みについてHTTPの仕組みについて
HTTPの仕組みについて
iPride Co., Ltd.
 

Similar to About http (20)

ゆるべん Webアプリ開発概要 20130127
ゆるべん Webアプリ開発概要 20130127ゆるべん Webアプリ開発概要 20130127
ゆるべん Webアプリ開発概要 20130127
 
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
 
サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901サーバーの初歩的な話セミナー@大阪20120901
サーバーの初歩的な話セミナー@大阪20120901
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
 
Lesson01
Lesson01Lesson01
Lesson01
 
20080524
2008052420080524
20080524
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
Study2study3 nslope
Study2study3 nslopeStudy2study3 nslope
Study2study3 nslope
 
勉強会資料①
勉強会資料①勉強会資料①
勉強会資料①
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
Node.js+MongoDB in SPA
Node.js+MongoDB in SPANode.js+MongoDB in SPA
Node.js+MongoDB in SPA
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
 
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしいIBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
 
Php s1
Php s1Php s1
Php s1
 
Comparing GlusterFS Swift API to Native Swift
Comparing GlusterFS Swift API to Native SwiftComparing GlusterFS Swift API to Native Swift
Comparing GlusterFS Swift API to Native Swift
 
勉強会 Vol1 『ホスティングとは?』
勉強会 Vol1 『ホスティングとは?』勉強会 Vol1 『ホスティングとは?』
勉強会 Vol1 『ホスティングとは?』
 
20090328
2009032820090328
20090328
 
HTTPの仕組みについて
HTTPの仕組みについてHTTPの仕組みについて
HTTPの仕組みについて
 

About http

  • 1. Copyright © 2021 ethan All Rights Reserved. HTTPとは Hypertext Transfer Protocol (HTTP) は HTML などのハイパーメディア文書を転送するための アプリケーション層プロトコルです。
  • 2. Copyright © 2021 ethan All Rights Reserved. HTTPの概要 HTTP は、 HTML 文書などのリソースを取り出すことを可能にするプロトコルです
  • 3. Copyright © 2021 ethan All Rights Reserved. HTTPベースシステムの構成要素 HTTP はクライアントサーバープロトコルであり、 リクエストはクライアント (または代理のプロキシ) というひとつの実体から送信されます。 ほとんどの場合、クライアントはウェブブラウザーです。 個々のリクエストはサーバーに送信され、処理した後にレスポンスと呼ばれる回答を提供します。 クライアントとサーバーとの間には、例えばゲートウェイやキャッシュなどの様々な操作を行う、まとめてプロキシサーバー と呼ばれるいくつもの実体が存在しています。 プロキシ: ・キャッシュ (キャッシュは共用、あるいはブラウザーキャッシュのように個人用にできます) ・フィルタリング (アンチウィルススキャンやペアレンタルコントロールなど) ・負荷分散 (複数のサーバーが別々のリクエストに対応できるようにする) ・認証 (さまざまなリソースへのアクセスを制御する) ・ログ記録 (履歴情報の保管を可能にする)
  • 4. Copyright © 2021 ethan All Rights Reserved. HTTPの基本方針 ▼シンプル 全体的にシンプルで人間が読んで理解できるように設計されている。 ▼拡張可能 HTTP ヘッダーによって、プロトコルの拡張や実験が容易になっています ▼ステートレスであるがセッションレスではない ステートフル:状況によって、あるリクエストをしたら、レスポンス (対応や反応、応答内容等) が変わるもの。 ステートレス:状況によらず、あるリクエストをしたら、必ず同じ結果になるもの。 ▼HTTPとコネクション Connection ヘッダーを使用して、下層の TCP コネクションを部分的に制御できます。 HTTP/2 はひとつのコネクションで複 数のメッセージを多重化するように進化しました。コネクションををウォーム状態に保つのに役立ち、効率が向上します。
  • 5. Copyright © 2021 ethan All Rights Reserved. HTTPが制御できること HTTP で制御できる一般的な機能は以下のとおりです。 キャッシュ 文書をどのようにキャッシュするかを、 HTTP で制御できます。サーバーはプロキシやクライアントに対して、何をどれだけの間キャッシュするかを指示できます。ク ライアントは中間のキャッシュプロキシに対して、保存されている文書を無視するよう指示できます。 オリジン制約の緩和 のぞき見や他のプライバシー侵害を避けるため、ウェブブラウザーはウェブサイト間を厳密に分割するよう強制しています。同一オリジンのページだけが、ウェブペー ジの情報すべてにアクセスできます。この制約はサーバーにとって負担になりますが、 HTTP ヘッダーでサーバー側の厳密な分割を緩和できます。これにより、さまざ まなドメインを情報源とした情報の寄せ集めの文書を作成できます。ただし、このようにするセキュリティ上の理由があります。 認証 特定のユーザーしかアクセスできないように保護されたページがあるでしょう。基本的な認証は HTTP が提供しており、 WWW-Authenticate などのヘッダーを使用す るか、 HTTP Cookie を使用した特別なセッションを設定するかします。 プロキシとトネリング サーバーやクライアントがイントラネット内に配置されて、他のコンピューターから本当の IP アドレスが見えなくなっていることがよくあります。このネットワーク 境界を渡るため、 HTTP リクエストはプロキシを通過します。すべてのプロキシが HTTP プロキシであるとは限りません。たとえば、 SOCKS プロトコルはより低い 層で動作します。ほかにも FTP などがそれらのプロキシで処理されることがあります。 セッション HTTP Cookie を使用して、リクエストとサーバーのセッションを関連付けできます。これにより HTTP がステートレスプロトコルであるにもかかわらず、セッション を作成できます。これは電子商取引のショッピングバスケットだけでなく、出力内容にユーザー設定を適用できるサイトでも有用です。
  • 6. Copyright © 2021 ethan All Rights Reserved. HTTPのフロー クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、 クライアントは以下の段階を踏みます。
  • 7. Copyright © 2021 ethan All Rights Reserved. HTTPのフロー(1)TCPコネクションを開く クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、 クライアントは以下の段階を踏みます。 (1)TCP コネクションを開く: TCP コネクションはひとつまたは複数のリクエストを送信したり、 回答を受け取ったりするために使用します。 クライアントは新しいコネクションを開く、既存のコネクション を再使用する、あるいはサーバーに対して複数の TCP コネクショ ンを開くことができます。
  • 8. Copyright © 2021 ethan All Rights Reserved. HTTPのフロー(2) HTTP メッセージを送信する クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、 クライアントは以下の段階を踏みます。 (2) HTTP メッセージを送信する: GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
  • 9. Copyright © 2021 ethan All Rights Reserved. HTTPのフロー(3)サーバーから送信されたレスポンスを読み取る クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、 クライアントは以下の段階を踏みます。 (3)サーバーから送信されたレスポンスを読み取る: HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (ここに、リクエストした 29769 バイトのウェブページがある)
  • 10. Copyright © 2021 ethan All Rights Reserved. HTTPのフロー(4)次のリクエストのために、コネクションを閉じるか再使用する クライアントがサーバー (最終目的地のサーバーまたは中間のプロキシ) と通信したいとき、 クライアントは以下の段階を踏みます。 (4)次のリクエストのために、コネクションを閉じるか再使用する:
  • 11. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ-リクエスト HTTP メッセージはリクエストとレスポンスの 2 種類あり、それぞれ固有の形式になっています。 HTTP リクエストの例です。 リクエストは以下の要素で構成されます。 ▼HTTP メソッド: 通常、クライアントが実行したい操作を定義する GET や POST のような動詞か、OPTIONS や HEAD のような名詞です。一般 的にクライアントはリソースを取り込む (GET を使用) か HTML フォーム の値を送信する (POST を使用) ことを望みますが、場 合によってはほかの操作が必要になります。 ▼取り込むリソースのパス: 状況から明らかであればリソースの URL はこの要素から取り除 かれます。たとえばプロトコル (http://)、ドメイン (ここでは developer.mozilla.org)、TCP ポート (ここでは 80) が取り除か れます。 ▼HTTP プロトコルのバージョン: サーバーに追加の情報を与える任意の ヘッダー。 POST のようなメソッドではレスポンスと同様に、送信するリ ソースを包含したボディがあります。
  • 12. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ-レスポンス HTTP メッセージはリクエストとレスポンスの 2 種類あり、それぞれ固有の形式になっています。 レスポンスの例です。 レスポンスは以下の要素で構成されます。 ▼準拠する HTTP プロトコルのバージョン: ▼ステータスコード: リクエストが成功したか否か、およびその理由を示しま す。 ▼ステータスメッセージ: ステータスコードの簡単な説明ですが、権威はありませ ん。 ▼リクエストと同様の HTTP ヘッダー ▼リソースを含む本文
  • 13. Copyright © 2021 ethan All Rights Reserved. HTTP基づくAPI 最もよく使われている HTTP に基づく API は XMLHttpRequest API で、 ユーザーエージェントとサーバーの間でデータを交換するために使用することができます。 新しい Fetch API は、同じ機能をより強力で柔軟な一連の機能で提供します。 他の API、 server-sent event は、 サーバーがクライアントにイベントを送信することができる一方通行のサービスで、 HTTP をトランスポートの仕組みとして利用しています。 クライアントのブラウザーは HTTP ストリームに届くメッセージを自動的に適切な Event オブジェクトに変換し、 もしイベントの型が分かればその型に登録されているイベントハンドラーに配信し、 型に対してイベントハンドラーが設定されていない場合は、 onmessage イベントハンドラーに配信します。
  • 14. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ 過去に取得したリソースを再使用すると、ウェブサイトやアプリケーションのパフォーマンスが大きく向上するでしょう。 ウェブキャッシュは遅延やネットワークのトラフィックを削減して、リソースを表示するために必要な時間も短縮します。 HTTP キャッシュを使用すると、ウェブサイトの応答性が高まります。 キャッシュは、提供されたリソースの複製を保存して、要求されたときに背後でその複製を提供する技術です。ウェブキャッシュのストア内に要求されたリソースがあるとき、キャッ シュはリクエストに介入して、提供元のサーバーから再びダウンロードする代わりにキャッシュ内の複製を返します。これにより、サーバーがすべてのクライアントに応対する必要が なくなり負荷が軽減する、キャッシュがクライアントに近いところにあるのでパフォーマンスが向上する、すなわちリソースを返すためにかかる時間を短くするといったことを実現で きます。ウェブサイトについて、高いパフォーマンスを達成するための主要な構成要素です。一方、すべてのリソースを同じまま永久に保存しないよう、キャッシュを適切に設定しな ければなりません。キャッシュはあまり長く保存せず、リソースが変更されるまでの間にすることが重要です。
  • 15. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- さまざまな種類のキャッシュ キャッシュにはさまざまな種類があり、これらはプライベートキャッシュと共有キャッシュの 2 つのカテゴリーに大きく分類 できます。共有キャッシュは複数のユーザーが再使用するためにレスポンスを保存するキャッシュです。 プライベートキャッシュはひとりのユーザーのためのキャッシュです。 このページでは主にブラウザーのキャッシュとプロキシのキャッシュを扱いますが、ウェブサイトやウェブアプリケーション の信頼性、パフォーマンス、規模を向上するためにウェブサーバーで展開されるゲートウェイのキャッシュ、CDN、リバース プロキシのキャッシュ、ロードバランサーも存在します。
  • 16. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- プライベートなブラウザのキャッシュ プライベートキャッシュは、ひとりのユーザーのためのキャッシュです。 ブラウザーの設定で "キャッシュ" を見たことがあるでしょう。 ブラウザーのキャッシュは、ユーザーが HTTP でダウンロードしたすべての文書を保持します。 このキャッシュは訪問済みの文書で、サーバーと追加のやり取りを行う必要なしに戻る/進む操作、ページの保存、ソースの 表示などを可能にします。また同様に、キャッシュ済みコンテンツのオフライン表示が改善します。
  • 17. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- 共有されるプロキシキャッシュ 共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気 があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一 部としてウェブプロキシを設置しているでしょう。
  • 18. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- 共有されるプロキシキャッシュ 共有キャッシュは、複数のユーザーによって再使用されるレスポンスを保存するキャッシュです。例えば ISP や企業は、人気 があるリソースを何度も再使用してネットワークのトラフィックや遅延を低減するために、ローカルネットワークの基盤の一 部としてウェブプロキシを設置しているでしょう。
  • 19. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- キャッシュ処理の対象 HTTP キャッシュは必須ではありませんが、キャッシュしたリソースの再使用は通常望ましいことです。 ただし一般的な HTTP キャッシュはたいてい、GET のレスポンスのみキャッシュするよう制限されており、他のメソッドで はキャッシュしません。 主要なキャッシュのキーはリクエストメソッドと対象 URI で構成されます (GET リクエストだけをキャッシュの対象にするた め、URI しか使用されないことがよくあります)。キャッシュ項目の一般的な形式は以下のとおりです。 ・取得要求に成功した結果: GET リクエストに対する 200 (OK) レスポンスには、HTML 文書、画像、ファイルなどのリソースが含まれています。 ・恒久的なリダイレクト: 301 (Moved Permanently) レスポンス。 ・エラーレスポンス: 404 (Not Found) のページ。 ・不完全な結果: 206 (Partial Content) レスポンス。 ・キャッシュのキーとして使用することが適切であると定義されていれば、GET 以外のレスポンス。
  • 20. Copyright © 2021 ethan All Rights Reserved. HTTPキャッシュ- キャッシュイメージ
  • 21. Copyright © 2021 ethan All Rights Reserved. HTTPCookieの使用 Cookie は主に、以下の 3 つの用途で使用されます。 ▼セッション管理: ログイン、ショッピングカート、ゲームのスコア、またはその他のサーバーが覚えておくべきもの ▼パーソナライゼーション: ユーザー設定、テーマ、その他の設定 ▼トラッキング: ユーザーの行動の記録及び分析
  • 22. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ -HTTPリクエスト –開始行 HTTP リクエストは、アクションを始めるためにクラアントからサーバーへ送られます。その開始行には、3 つの要素が含ま れています。 ▼(1)HTTPメソッド: ・GET:データを取り込むこと ・HEAD:GETリクエストを同じレスポンスを求めるが、レスポンス本文はない。 ・POST:データをサーバーへ送信すること。 ・PUT:対象リソースの現在の表現の全体をリクエストのペイロードで置き換える。 ・DELETE:指定したリソースを削除する ・CONNECT:対象リソースで識別されるサーバーとの間にトンネルを確立する。 ・OPTION:対象リソースの通信オプションを示すために使用する。 ・TRAEC:対象リソースへのパスに沿ってメッセージのループバックテストを実行する。 ・PATCH:リソースを部分的に変更するために使う ▼(2)リクエスト対象: 通常は URL ですが、プロトコル、ポート、ドメインの絶対パスは通常、リクエストの状況から明らかにされます。リクエスト対象の形式は、HTTP メソッドにより異 なります。 ▼(3)HTTPバージョン: メッセージの残りの部分の構造を定義しており、レスポンスで使用することを想定しているバージョンを示す役割もあります。
  • 23. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ -HTTPリクエスト –ヘッダー リクエストの HTTP ヘッダー は、HTTP ヘッダーの一定の基本構造に従います。大文字・小文字を区別しない文字列の後に コロン (':') と、ヘッダーに応じた構造の値が続きます。値を含むヘッダー全体は 1 行で構成されており、とても長くなる場合 もあります。 使用できるリクエストヘッダーは多数あります。これらはいくつかのグループに分類されます。 ▼一般ヘッダーは、 Via など、メッセージ全体に適用されるものです。 ▼リクエストヘッダーは、 User-Agent, Accept-Type, 指定するとリクエストを変更するもの (Accept-Language など)、状況 を示すもの (Referer など)、条件を与えるもの (If-None など) があります。 ▼エンティティヘッダーは Content-Length など、リクエストの本文に適用されます。当然ながら、リクエスト内に本文がな い場合はこれらのヘッダーが送信されません。
  • 24. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ -HTTPリクエスト –本文 リクエストの最後の部分が本文です。本文が存在しないリクエストもあります。リソースを取り込むリクエストである GET, HEAD, DELETE, OPTIONS は通常、本文は不要です。サーバー内のデータを更新するためにデータを送信するリクエストもあ り、 POST リクエストでよくあります (HTML フォームのデータを持つ)。 本文は、大きく 2 種類に分類されます。 ▼単一リソースの本文: 1 個のファイルで構成され、Content-Type と Content-Length の 2 つのヘッダーで定義されます。 ▼複数リソースの本文: マルチパートの本文で構成され、それぞれが異なる情報を持ちます。これは主に、 HTML フォームと関連付けられます。
  • 25. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ –HTTPレスポンス –ステータス行 HTTP レスポンスの開始行はステータス行と呼ばれ、以下の情報を持ちます。 プロトコルバージョン。通常 HTTP/1.1 です。 ステータスコード。リクエストが成功したか失敗したかを示します。一般的なステータスコードは 200, 404, 302 です。 ステータス文字列。手短な単なる情報ですが、人間が HTTP メッセージを理解するのを助けるために、ステータスコードをテ キストで説明します。 一般的に、ステータス行は HTTP/1.1 404 Not Found. のようになります。
  • 26. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ –HTTPレスポンス –ヘッダー レスポンスの HTTP ヘッダーは、他のヘッダーと同様に一定の基本構造に従います。大文字・小文字を区別しない文字列の後 にコロン (':') と、ヘッダーの種類に応じた構造の値が続きます。値を含むヘッダー全体は 1 行で構成されます。 使用できるレスポンスヘッダーは多数あります。これらはいくつかのグループに分類されます。 一般ヘッダーは Via など、メッセージ全体に適用されるものです。 レスポンスヘッダーは Vary や Accept-Ranges など、ステータス行で伝えられないサーバーの追加情報を与えます。 エンティティヘッダーは Content-Length など、レスポンスの本文に適用されます。通常、レスポンス内に本文がない場合は このようなヘッダーは送信されません。
  • 27. Copyright © 2021 ethan All Rights Reserved. HTTPメッセージ –HTTPレスポンス –本文 レスポンスの最後の部分が本文です。本文を持たないレスポンスもあります。 201 Created や 204 No Content といったス テータスコードのレスポンスは通常、本文がありません。 本文は、大きく 3 種類に分類されます。 大きさが判明している 1 個のファイルで構成される、単一リソースの本文。 Content-Type と Content-Length の 2 つのヘッ ダーで定義されます。 大きさが不明な 1 個のファイルで構成される、単一リソースの本文。 Transfer-Encoding を chunked に設定して、 chunked 形式でエンコードされます。 複数リソースの本文。マルチパートの本文で構成され、それぞれが異なる情報のセクションを持ちます。これは比較的まれで す。
  • 28. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション
  • 29. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション-コネクションの確立 クライアントサーバープロトコルでは、クライアントがコネクションを確立します。HTTP のコネクションを開くとは、下層 のトランスポート層のコネクションを確立することであり、これは通常 TCP です。 コンピューター上の HTTP サーバー用の、 TCP の既定のポートは 80 番です。8000 番や 8080 番など、ほかのポートを使用 することもできます。読み込むページの URL はドメイン名とポート番号の両方を含みますが、後者は 80 番である場合に省略 できます。
  • 30. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション- クライアントの要求の送信 コネクションを確立すると、ユーザーエージェントは要求を送信できます。 クライアントの要求は CRLF (キャリッジリターンに続いてラインフィード) で区切られたテキストのディレクティブで構成さ れ、3 つのブロックに分けられます。 ▼最初の行は、要求メソッドの後に次の引数が続きます。 ・文書のパス、すなわち絶対 URL からプロトコル名とドメイン名を除いたものです。 ・HTTP プロトコルのバージョン。 ▼後続の行は HTTP ヘッダーであり、サーバーに対してどの種類 (例えば、言語や MIME タイプ) のデータが適切かを示す情 報や、サーバーの動作を変える (例えば、すでにキャッシュされている場合は回答を送信しない) データを与えます。これらの HTTP ヘッダーは空行で終わるブロックを構成します。 ▼最後のブロックは省略可能なデータブロックで、主に POST メソッドで使用される追加のデータを含みます。
  • 31. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション- 要求の例 GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr developer.mozilla.org のルートページ、すなわち http://developer.mozilla.org/ を読み込む、また可能 であればユーザーエージェントはフランス語のページ を希望することをサーバに伝えます POST /contact_form.php HTTP/1.1 Host: developer.mozilla.org Content-Length: 64 Content-Type: application/x-www-form-urlencoded name=Joe%20User&request=Send%20me%20one% 20of%20your%20catalogue ヘッダーブロックとデータブロックを分けている、最 後の空行に注意してください。この例は HTTP ヘッ ダーに Content-Length がありませんので、空のデー タブロックが与えられてヘッダーの終わりを示してお り、サーバーはこの空行を受け取るとただちに要求を 処理できます。 フォームの入力結果を送信する例です。
  • 32. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション- 要求メソッド HTTP では、リソースに対して実行したいアクションを示す要求メソッドのセットを定義しています。 要求メソッドには名詞も存在しますが、 HTTP 動詞と言われることがあります。 GET と POST が最も一般的です。 GET メソッドは、指定したリソースのデータを要求します。 GET を使用する要求は、データの取り込みに限ります。 POST メソッドはサーバーにデータを送信しますので、データの状態を変更できます。 これは、 HTML フォーム用によく使用されるメソッドです。
  • 33. Copyright © 2021 ethan All Rights Reserved. 典型的なHTTPセッション- サーバー応答の構造 接続したクライアントが要求を送信すると、 ウェブサーバーはその要求を処理して、 最終的に応答を返信します。 クライアントの要求と同様にサーバーの応答は テキストのディレクティブで構成され、 それらは CRLF で区切られており、3 つのブロックに分けられます: 最初の行はステータス行で、 受け入れた HTTP バージョンとステータス要求で構成されます (そして、人間に読めるテキストで意味を簡単に示します)。 後続の行はそれぞれ具体的な HTTP ヘッダーを表しており、 クライアントに対して送信したデータに関する情報 (例えば種類、サイズ、圧縮方法、キャッシュ情報) を与えます。 クライアントの要求の HTTP ヘッダーブロックと同様に、 これらの HTTP ヘッダーも空行で終わるブロックを構成します。 最後のブロックはデータブロックで、任意のデータを含みます。 HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (ここにサイズが 29769 バイトの、要求された ウェブページが置かれます)
  • 34. Copyright © 2021 ethan All Rights Reserved. fin
  • 35. Copyright © 2021 ethan All Rights Reserved. 文献 ▼ MDN web Docs – HTTP チュートリアル https://developer.mozilla.org/ja/docs/Web/HTTP ▼ MDN web Docs – HTTPの概要 https://developer.mozilla.org/ja/docs/Web/HTTP/Overview ▼ MDN web Docs – HTTPキャッシュ https://developer.mozilla.org/ja/docs/Web/HTTP/Caching ▼ MDN web Docs – HTTPのcookieの使用 https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies ▼ MDN web Docs – HTTPメッセージ https://developer.mozilla.org/ja/docs/Web/HTTP/Messages
  • 36. TCP/IP model Protocol and services OSI model Application Transport Network Network Interface Application Transport Network Physical Session Data Link Presentation HTTP, FTTP, Telnet,NTP, DHCP,PING TCP,UDP IP,ARP,ICMP,IGMP Ethernet