HTTP(HyperText Transfer Protocol)
Overview
HTTP(HyperText Transfer Protocol)はサーバとクライアント(ブラウザ)の間でウェブページを送受信するためのプロトコル。
また、World Wide Web上の通信方法を示すものであり、この通信はクライアントからサーバーへのリクエストとサーバーからクライアントへのレスポンスで構成される。
こうしたHTTPリクエストとHTTPレスポンスには、ヘッダーーと呼ばれる一連のキーと値のペアが追加される。
HTTP自体は**ステートレス(状態を保持せず1回で完結すること)**なプロトコル
リクエスト (GET) => レスポンス (200 OK ...) で手続きが完結。
SMTPのように複数の手続きを踏む必要はなく、その時の状態も保持していない。
HTTP 歴史
現在最新のversionは1.1
1.1になる前には0.9と1.0の2つのバージョンが存在していた。
また1.1の後継もある。
※0.9に関しては仕様書は存在しない。Berners-LeeがWebを発明していたときのプロトコルが呼ばれている。
- 0.9 : headerがなかった
- 1.0 : IETFが標準化された最初のバージョン(POST対応)
- 1.1 : HTTPの完成(バーチャルホスト対応)
- 2.0 : 2015年ほど
チャンク転送・Acceptヘッダーによるコンテントネゴシエーション・複雑なキャッシュコントロール、持続的接続などの機能。
1.1以降も議論が続けられているが、HTTPそのものの価値をRESTアーキテクチャスタイルに見出した結果、HTTP1.1を有効に活用していこう。
というのが現代的な開発スタイルとなっている。
参考
リファレンス(一番わかりやすい)
HTTP入門
冪等性について
ブラウザからサーバまでわかりやすい
プロトコル
HTTPの仕組み再入門
普及が進む「HTTP/2」の仕組みとメリットとは
HTTP仕組み
BASEとなっているのはTCP/IP
これをみて参考にする(一番いいためまとめる)
HTTPリクエストの種類
Form: 同期通信
- 説明: HTMLフォームを使用して送信されるリクエスト。通常、ページが再読み込みされる。
- 特徴:
- デフォルトでは、ページがリロードされる同期通信。
- データはURLエンコードされて送信される。
- サーバーからのレスポンスに基づいてページが更新される。
XMLHttpRequest (XHR): 非同期通信(CORS対象)
- 説明: JavaScriptを使用して非同期にサーバーと通信するためのオブジェクト。
- 特徴:
- 非同期通信をサポートし、ページの一部を更新できる。
- CORS(Cross-Origin Resource Sharing)の制約を受ける。
- レスポンス形式としてXML、JSON、HTML、テキストなどを扱える。
- 同期通信も可能だが、推奨されない。
Fetch: 非同期通信(CORS対象)
- 説明: モダンなJavaScript APIで、XHRに代わるものとして設計された。
- 特徴:
- 非同期通信をサポートし、Promiseベースのインターフェースを提供。
- CORSの制約を受ける。
- よりシンプルで直感的な構文。
- レスポンスをストリームとして扱えるため、部分的なデータ取得が可能。
JSONP
- 説明: JSON with Padding。クロスドメインリクエストを行うための古い方法。
- 特徴:
<script>
タグを使用してリクエストを送信する。- サーバーがJavaScriptの関数をラップしたJSONを返す。
- 主にGETリクエストに使用。
AJAX(Asynchronous JavaScript and XML)
- 説明: 非同期通信の総称。XMLHttpRequestやFetchを用いた通信方法を指す。
- 特徴:
- サーバーと非同期でデータのやり取りをする。ページの一部を更新できる。
- リクエストは非同期で行われるため、ページのリロードが不要。
- JSON、XML、HTMLなどさまざまな形式のデータを扱える。
通常のHTTPリクエスト
- ブラウザがHTMLをリクエストする
- ユーザーがブラウザでURLを入力するか、リンクをクリックする。
- ブラウザはDNSサーバにアクセスし、ドメイン名をIPアドレスに解決する。
- そのIPアドレスに対して、HTTPリクエストを送信する。
- サーバがリクエストを受け付け、DBに問い合わせをしHTMLを生成
- サーバがリクエストを受信する。
- リクエストに基づいて必要なデータをデータベースから取得する。
- データを基にHTMLを生成し、レスポンスとしてブラウザに返す。
- ブラウザがHTMLを受け取る
- ブラウザがサーバからのレスポンスを受信する。