【HTTPの機能について】

               このHPはHTTPの機能(www、概要、バージョン)についてまとめたものです。


1-1 WWW

WWWは、「ハイパーテキスト」と呼ばれる形式のドキュメントを利用者に提供するために利用されるシステム。
WWWでは、ハイパーテキストの記載に「HTML」という言語を利用する。
WWWでは、
Webサーバが、ハイパーテキストで記述された情報を保存し、クライアントであるWebブラウザからの要求に従って、ハイパーテキストをWebブラウザにホームページのデータを表示する。

またWebブラウザからサーバに情報を要求したり、要求された情報をWebブラウザに返すために、WWWでは
「HTTP」というプロトコルを用いる。






1-2 HTTPの概要

「HTTP」は、クライアント(Webブラウザ)とWebサーバとの間で、データをやり取りするためのプロトコル。
クライアントは宛先ポート番号として「TCPの80番」を指定する。
「HTTP」では、
クライアントであるWebブラウザが要求を送り、Webサーバーがその要求に対して応答を
返す、といったやり取りを繰り返すことで,Webサイトの閲覧を可能にしている。


「HTTP」において、クライアント(Webブラウザ)とWebサーバーでやり取りをする際に利用されるのが
「HTTPメッセージ」。
HTTPメッセージは、クライアント(Webブラウザ)からの要求である「HTTPリクエスト」と、Webサーバーからの応答である「HTTPレスポンス」の2種類に分けることができる。
HPが表示されるまでの流れは以下の様になる。



【HPが表示されるまでの流れ】

@PCで動作している「Webブラウザ」に、見たいHPのURLを指定する。
どのWWWサーバ上のどのページを見るか、という指定の事を
「URL」という。


AWebブラウザはこれを解釈して、
Webサーバに「HTTPリクエスト」を送信する。


BWebサーバは、このリクエストを受信すると、
リクエストを解釈・処理し、自分のデータベースに格納されているHTMLファイル/画像ファイルを見つけて、「HTTPレスポンス」を作成する。


CWebサーバが
要求されたWebページの「HTTP」レスポンスを送信する。


DWebブラウザはWebサーバーからの「HTTPレスポンス」を受信すると、
ブラウザの画面上に表示する。










1-3 HTTPのバージョン

HTTPは、登場以来今までに「HTTP/0.9 」→「HTTP/1.0」→「HTTP/1.1」→「HTTP/2」→「HTTP/3」とバージョンアップされている。













◆HTTP/0.9

HTTP0.9の取り決めは、シンプルなもの。
Webサーバーから指定して、
「Getメソッド」で取得(ダウンロード)するのみ。
ただし、Webサーバーからのリソースは「テキストファイル(HTMLファイル)のみに限定される。







◆HTTP/1.0

HTTP1.0では、テキストファイル以外にも色々なファイルを扱えるようになり、またダウンロード(GET)だけでなく、アップロードや削除もできる様になっている。






◆HTTP/1.1

HTTPリクエストやHTTPレスポンスといったデータのやりとりは、TCPで行われる。
HTTP/1.0以前では、WebブラウザからHTTPリクエストを送信する度にTCPコネクションを確立し、Webサーバーが「HTTPレスポンス」としてデータを渡してコネクションを閉じるという方式が使用されていた。

HTTP/1.1には、
「キープアライブ」、「パイプライン」など、TCPレベルにおけるパフォーマンス向上を図る機能がある。


●キープアライブ
キープアライブは、一度作成したTCPコネクションを再利用すること。
Webサーバーとブラウザで接続をする際、3ウェイハンドシェイクを行う必要があるが、コネクションの再利用によって、3ウェイハンドシェイクを改めて行う必要がなくなり、システム全体の負荷が大きく軽減し、時間短縮や負担軽減に繋がった。







●HTTPパイプライン

HTTPでは、通常1つのHTTPリクエストを送信し、それに対するHTTPレスポンスを受けとるまでは次のHTTPリクエストを送信することができない。
「HTTPパイプライン」とは、1つのTCP接続上で、HTTPリクエストに対するレスポンスを待たずに次のHTTPリクエストを送信する機能
HTTPレスポンスを受け取る前にHTTPリクエストを送信するため、
時間短縮が可能になる。








◆HTTP/2

●ストリーム
HTTP/1.1では、HTTPリクエストが発生した際に、TCPコネクションを開始し、レスポンスの完了を待って切断する。
HTTP/2では、1本のTCPコネクションの中に
「ストリーム」という仮想チャネルを作成し、ストリームごとに複数のリクエスト/レスポンスを並列に処理し、必要最小限のTCP処理負荷で、最大のパフォーマンスを発揮できる。




●HPACK
HPACKは、メッセージヘッダーを圧縮する機能。
HTTP/2は、ヘッダ情報の中から差分だけを送るHPACKと呼ばれる圧縮方式を利用し、データ転送量を削減できる。


●サーバープッシュ
HTTP/2では、1つのHTTPリクエストに対し、複数のHTTPレスポンスを返す機能を追加している。
これが
「サーバープッシュ」
クライアントからHTTPリクエストの内容をもとに、
Webサーバー側で必要なファイルを判断し、事前にクライアントに送信することが可能。

例えば、Webサーバーが最初に「index.html」のHTTPリクエストを受け取った時点で、サーバーは、
CSSファイルや画像ファイルを要求してくる事を予測し、「サーバープッシュ」で画像ファイルを用意しておき、クライアントからのリクエストを待たずにCSSファイル・画像ファイルを送ることが可能。







◆HTTP/3

HTTP/3の特徴は、TCPではなく、「UDP」を使用することと、「QUIC」を使用すること。
「QUIC」とは、Googleが開発した新プロトコルで、
TCPと同等の信頼性確保の仕組みを備えつつ、UDPを用いて高速化するトランスポート層のプロトコル。
これにより、HTTP/3の通信ではさらなる効率化が可能になる。




ただし、HTTP/3が普及しても
ユーザにとって変化はそれほど無い。
HTTP/3では、TCPが担っていた主な機能を「QUIC」がより効率的に実現する。
また、
HTTP通信も「リクエストメッセージ」と「レスポンスメッセージ」を使用してやりとりをするという従来のやり方と同じ。






●TLS1.3

HTTP/3のもう1つの特徴は、「暗号化対象の拡大」。
ほとんどの情報を暗号化して、より安全に通信が出来る様になった。

HTTP/3は、「TLS1.3」というプロトコルによる暗号化通信を前提にしている。
TLSは、
暗号化通信をするために「SSLハンドシェイク」という処理を行う。

TLS1.3は、
より少ないパケットのやりとりで早い認証・暗号化ができる様、SSLハンドシェイクの効率化が図られている。
TLSは元々、暗号通信のハンドシェイクと暗号化をまとめて担当するプロトコルだったが、
「TLS1.3」では、これら2つの機能が分離された。
HTTP/3では、TLS1.3のハンドシェークの機能だけを利用し、暗号化は「QUIC」が担当する。