HTTP ?
HTTP とは?
HyperText Transfer Protocolでハイパーテキスト配信プロトコルです。
ハイパーテキストはインターネットユーザーが情報を自由に検索できるようにするテキスト展開方式で、HTTPはこのようなハイパーテキストタイプの情報を交換するための一つのルールです。
ウェブブラウザとウェブサーバーとのコミュニケーションのためにデザインされ、クライアントがリクエストするための接続を開き、応答を受けるまで待機する伝統的なクライアントサーバーモデルに従います。
HTTPは特定の状態を維持しないstatelessが特徴です。
stateless?
文字通り状態を持たないという意味で、HTTPでクライアントとサーバが通信をやり取りする過程で、HTTPがクライアントやサーバの状態を確認しません。
動作方式
- クライアント : サーバーにリクエストを送信するリソース使用者
- サーバー : クライアントにリクエストへの応答を提供するリソース管理者
クライアントがサービスのURIをブラウザを通じてサーバにリクエストすると、サーバはそのリクエストに対する結果に応答する形で動作します。
HTTP メッセージ
HTTPメッセージはクライアントとサーバの間でデータが教化される方式でテキスト情報を構成し、構成ファイル、APIなどでHTTPメッセージを自動的に完成させます。
HTTPメッセージにはリクエストとレスポンスの2種類があります。
- Start Line : リクエストの状態を表し、最初の行に位置
- Status Line : レスポンスの状態を示し、最初の行に位置
- HTTP Headers : リクエストを指定したり、メッセージに含まれる本文を説明するヘッダーの集合
- Body : リクエストやレスポンスに関連するデータ、または文書を含みます。リクエストとレスポンスのタイプに応じて選択的に使用します。
StartLine & HTTP Headers : リクエストのヘッダ
StatusLine & HTTP Headrs : レスポンスのヘッダ
リクエスト
HTTP Requestがサーバーに送るメッセージです。
Start Line
Start Lineには3つの要素があります。
- 遂行する作業(GET, POST.. )や方式(HEAD、OPTION)を説明するHTTPメソッド
- 要求対象またはプロトコルなどはリクエストコンテキストに作成され、HTTPメソッドごとに異なって作成されます
- HTTPバージョンによってHTTPメソッド構造が異なりますので、HTTPバージョンが一緒に入力されます。
Headers
Headersは基本構造に従います。 ヘッダの名前、コロン、値の形で入力され、値はヘッダによって異なります。
- 一般ヘッダ:メッセージ全体に適用されるヘッダで、bodyを通じて送信されるデータとは関係ないです。
- リクエストヘッダ:fetchを通じて取得するリソースやクライアント自体に関する詳細情報を含むヘッダで、user-agent、Accet-type、Accet-Languageなどのヘッダはリクエストを具体化します。
- 表現ヘッダ : bodyに含まれた情報を含むヘッダーです。
body
Bodyは要請の本文でHTTP構造の最後に位置します。
すべてのリクエストにbodyが必要なわけではないですが、POST、PUTなどのデータをアップデートするためのメソッドにはobdyが使用されます。
単一リソース:ヘッダー2つ(Content-typeとContent-length)で定義されたbody
マルチリソース:複数のパーツで構成されたbody、各パーツごとに異なる情報を持っています(html form..)
リクエスト method
- GET:特定のリソースを受け取るためのリクエスト
- POST : リソースの作成やコントローラーの実行に使用
- PUT : 変更可能なリソースの更新に使用
リソース識別情報を含める必要があります - PATCH : 変更可能なリソース部分の更新に使用
リソース識別情報を含める必要があります。 - PUT : putを使ってオブジェクト全体を更新するのが慣例なので、ほとんど使用されません。
- DELETE : 特定のリソースを削除するために使用
- HAED : クラリアントが本文なしでリソースに対するヘッダのみを検索する場合に使用
- OPTIONS : クライアントがサーバのリソースに対して実行可能な動作を調べるために使用します。
サーバーは、このリソースに対して使用できるHTTP要求メソッドを含むALLOWヘッダーを返します。 (CORS)
レスポンス
HTTP Responseは、クライアントのリクエストにサーバがレスポンスするものです。
Status Line
回答の最初の行にStatusLineが含まれ、次のような情報があります。
- 現在のプロトコルバージョン
- ステータスコード : リクエスト結果(200、404..)
- ステータス テキスト: ステータス コードの説明です
Headers
応答に入るHTTP Headersは要求ヘッダーと同じ構造を持っています。
- 一般ヘッダ:メッセージ全体に適用されるヘッダで、bodyを介して送信されるデータとは関係のないヘッダ
- 応答ヘッダ : 位置やサーバー自体に関する情報のように応答に対する付加的な情報を持つヘッダ
- 表現ヘッダ: bodyに含まれたリソースの情報を含むヘッダ
Body
リクエストと同様に、すべての応答はbodyを含みません。
Discussion