重要概念

HTTP を理解する: Web 通信のバックボーン

10 分読む
Feb 18, 2025

HTTP(ハイパーテキスト転送プロトコル)は、ワールド・ワイド・ウェブにおけるデータ通信の基盤です。OTT(オーバー・ザ・トップ)およびRTC(リアルタイム通信)技術の重要なコンポーネントとして、これらの分野で働く開発者やエンジニアにとってHTTPを理解することは不可欠です。このブログ記事では、HTTPの詳細、構造、およびHLS(HTTPライブストリーミング)などのストリーミング技術における応用について掘り下げます。

HTTPとは?

HTTPは、TCPの上に構築されたアプリケーション層のプロトコルです。インターネットで最も広く使用されているプロトコルであり、ハイパーテキスト文書、画像、動画、その他のマルチメディアコンテンツの転送を促進します。HTTPS(HTTPセキュア)は、データ転送のためにSSL/TLS暗号化を使用するHTTPの安全なバージョンです。

HTTP URL構造

HTTPリソースは、統一リソースロケータ(URL)を使用して識別されます。一般的なHTTP URLは、次の構造を持っています:

http://host[:port]/[path/]filename[?param1=value1&param2=value2][#fragment]
  • http://:HTTPプロトコルの使用を示します(またはhttps://はHTTPS用)
  • host:サーバーのドメイン名またはIPアドレス
  • port:ポート番号(HTTPのデフォルトは80、HTTPSは443)
  • path:サーバー上のリソースへのパス
  • filename:リソースの名前
  • paramvalue:クエリパラメータ
  • fragment:リソースの特定の部分、しばしばアンカーと呼ばれます

HTTP通信

HTTP通信は、クライアント(ユーザーエージェント)からのリクエストと、サーバー(オリジンサーバー)からのレスポンスを含みます。クライアントとサーバーの間には、プロキシサーバー、ゲートウェイ、またはトンネルなどの仲介者が存在する場合があります。

HTTPリクエスト構造

HTTPリクエストは、3つの部分で構成されています:

  1. リクエストライン
  2. メッセージヘッダー
  3. リクエストボディ

HTTPリクエストの例:

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml, application/xml; q=0.9,*/*; q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length: 26
Content-Type: application/x-www-form-urlencoded

username=abc&password=1234

HTTPレスポンス構造

HTTPレスポンスも、3つの部分で構成されています:

  1. ステータスライン
  2. メッセージヘッダー
  3. レスポンスボディ

HTTPレスポンスの例:

HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 08:12:54 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: keep-alive
Content-Type: text/html; charset=utf-8

<html>
<head>
<title>HTTPレスポンスの例</title>
</head>
<body>
こんにちは、HTTP!
</body>
</html>

HTTPステータスコード

HTTPステータスコードは、サーバーがクライアントのリクエストに応答して返す3桁の数字です。これらは5つのクラスに分類されます:

ステータスコード説明意味
1XX情報リクエストを受信し、処理を続行しています
2XX成功アクションが正常に受信され、理解され、受け入れられました
3XXリダイレクションリクエストを完了するためにさらなるアクションが必要です
4XXクライアントエラーリクエストに不正な構文が含まれているか、満たせません
5XXサーバーエラーサーバーが明らかに有効なリクエストを処理できませんでした

ここに一般的なステータスコードのいくつかがあります:

ステータスコードテキスト説明
200OKリクエスト成功
206部分的内容部分的なコンテンツが配信されました
301恒久的に移動しました要求されたURLは永久に移動しました
302見つかりました一時的なURLリダイレクション
304未変更リソースは前回のリクエスト以降変更されていません
400不正なリクエストサーバーがクライアントエラーのため処理できません
403禁止サーバーがリクエストを認証することを拒否しました
404見つかりません要求されたリソースが見つかりませんでした
500内部サーバーエラーサーバーが失敗したときの一般的なエラーメッセージ
502不正なゲートウェイサーバーが上流サーバーから無効な応答を受け取りました
503サービス利用不可サーバーが一時的にリクエストを処理できません

詳細については、以下を参照してください

ストリーミングにおけるHTTP:HLS(HTTPライブストリーミング)

HLSは、Appleによって開発されたストリーミングプロトコルで、メディア配信にHTTPを使用します。全体のストリームを一連の小さなHTTPベースのファイルダウンロードに分割することで機能します。

HLSワークフロー

HTTP Request and Response Flow for Streaming Media

  1. クライアントはまず、マスタープレイリストファイル(M3U8)を取得します。
  2. M3U8ファイルにはメディアセグメントファイル(TSファイル)のURLが含まれています。
  3. その後、クライアントはHTTPを介してこれらのTSファイルをダウンロードします。
  4. ライブストリーミングの場合、クライアントは新しいTSファイルのURLを取得するためにM3U8ファイルを継続的に更新します。

M3U8ファイル構造

M3U8ファイルはテキストベースで、一連のタグで構成されています。以下はその例です:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
http://media.example.com/segment0.ts
#EXTINF:10,
http://media.example.com/segment1.ts
#EXTINF:10,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST

以下は一般的なM3U8タグの表です:

タグ意味
#EXTM3UすべてのM3U8ファイルの最初の行である必要があります
#EXTINFTSファイルの持続時間を指定します
#EXT-X-TARGETDURATION任意のTSファイルの最大持続時間を指定します
#EXT-X-MEDIA-SEQUENCE最初のTSファイルのシーケンス番号を指定します
#EXT-X-KEYTSファイルの暗号化方法を指定します
#EXT-X-PROGRAM-DATE-TIMETSファイル内の最初のサンプルの日付/時刻を指定します
#EXT-X-ALLOW-CACHEクライアントがダウンロードしたメディアファイルをキャッシュできるかどうかを指定します
#EXT-X-PLAYLIST-TYPEプレイリストのタイプ(EVENTまたはVOD)に関する情報を提供します
#EXT-X-ENDLISTM3U8ファイルの終了を示します

HTTPダイナミックライブストリーミング(HDL)

HTTPダイナミックライブストリーミング(HDL)、より一般的にはHTTP-FLVとして知られるストリーミングメディアプロトコルは、Adobeによって開発されました。FLV(Flash Video)ファイルのオンライン伝送のためにHTTPを活用しており、ウェブベースのストリーミングの領域で重要な技術となっています。

HDLの動作原理はHLS(HTTPライブストリーミング)と似ています。両方のプロトコルはHTTPを使用して関連ファイルを取得し、その後対応する音声および映像ストリームデータを取得します。しかし、HLSがM3U8およびTSファイルを使用するのに対し、HDLはSWF(ショックウェーブフラッシュ)およびFLVファイルを利用します。これらのファイル形式はAdobeによって設計され、従来はFlash技術のサポートを必要とし、HTML5環境での直接使用が制限されました。(MSEをサポートするブラウザでは、flv.jsのようなライブラリを使用してサポートを有効にできますが、互換性の問題に注意する必要があります。)

SWF(ショックウェーブフラッシュ)は、Macromedia(後にAdobeに買収された)が開発したプロプライエタリ形式で、Flashアニメーション設計ソフトウェアに広く使用されてきました。SWFファイルの構造は次のとおりです:

HTTP Live Streaming (HLS) Workflow

1. Client sends HTTP GET request for m3u8 file.
2. Server responds with m3u8 file.ヘッダーの後に、いくつかのタグ付きデータブロックがあります。タグ形式はFLVカプセル化と一致しています。オンライン再生中は、通常、1つのSWFファイルだけを取得する必要があります。

HDLの再生プロセスは次のステップに従います:

  1. HTTP経由でSWFファイルを取得します
  2. SWFファイルを使用してFLVファイルを取得します
  3. FLVファイルの内容をデカプセル化、デコード、表示します
  4. SWFファイルのEndTagに達するまで、FLVファイルデータを継続的に取得し、処理、デコード、表示します

このプロセスは、HDLがHTTPを単なる初期ファイル取得だけでなく、全体のストリーミングプロセスにも利用していることを示しており、プロトコルの機能に不可欠な部分となっています。

SWFファイルに関する詳細情報は、Adobe Developer Centerを参照してください: http://www.adobe.com/devnet/swf.html

結論

HTTPはウェブ通信の背骨を形成し、HLSのような現代のストリーミング技術において重要な役割を果たしています。その構造、ステータスコード、およびストリーミングプロトコルにおける応用を理解することは、OTTおよびRTC分野で働く開発者にとって不可欠です。ウェブが進化し続ける中、HTTPは基本的な技術として残り、新しい要件やユースケースに適応しながら、デジタルコミュニケーションの変化する風景で重要な役割を果たしています。