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¶m2=value2][#fragment]
http:
//
:HTTPプロトコルの使用を示します(またはhttps:
//
はHTTPS用)host
:サーバーのドメイン名またはIPアドレスport
:ポート番号(HTTPのデフォルトは80、HTTPSは443)path
:サーバー上のリソースへのパスfilename
:リソースの名前param
、value
:クエリパラメータfragment
:リソースの特定の部分、しばしばアンカーと呼ばれます
HTTP通信
HTTP通信は、クライアント(ユーザーエージェント)からのリクエストと、サーバー(オリジンサーバー)からのレスポンスを含みます。クライアントとサーバーの間には、プロキシサーバー、ゲートウェイ、またはトンネルなどの仲介者が存在する場合があります。
HTTPリクエスト構造
HTTPリクエストは、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つの部分で構成されています:
- ステータスライン
- メッセージヘッダー
- レスポンスボディ
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 | サーバーエラー | サーバーが明らかに有効なリクエストを処理できませんでした |
ここに一般的なステータスコードのいくつかがあります:
ステータスコード | テキスト | 説明 |
200 | OK | リクエスト成功 |
206 | 部分的内容 | 部分的なコンテンツが配信されました |
301 | 恒久的に移動しました | 要求されたURLは永久に移動しました |
302 | 見つかりました | 一時的なURLリダイレクション |
304 | 未変更 | リソースは前回のリクエスト以降変更されていません |
400 | 不正なリクエスト | サーバーがクライアントエラーのため処理できません |
403 | 禁止 | サーバーがリクエストを認証することを拒否しました |
404 | 見つかりません | 要求されたリソースが見つかりませんでした |
500 | 内部サーバーエラー | サーバーが失敗したときの一般的なエラーメッセージ |
502 | 不正なゲートウェイ | サーバーが上流サーバーから無効な応答を受け取りました |
503 | サービス利用不可 | サーバーが一時的にリクエストを処理できません |
詳細については、以下を参照してください
ストリーミングにおけるHTTP:HLS(HTTPライブストリーミング)
HLSは、Appleによって開発されたストリーミングプロトコルで、メディア配信にHTTPを使用します。全体のストリームを一連の小さなHTTPベースのファイルダウンロードに分割することで機能します。
HLSワークフロー
- クライアントはまず、マスタープレイリストファイル(M3U8)を取得します。
- M3U8ファイルにはメディアセグメントファイル(TSファイル)のURLが含まれています。
- その後、クライアントはHTTPを介してこれらのTSファイルをダウンロードします。
- ライブストリーミングの場合、クライアントは新しい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ファイルの最初の行である必要があります |
#EXTINF | TSファイルの持続時間を指定します |
#EXT-X-TARGETDURATION | 任意のTSファイルの最大持続時間を指定します |
#EXT-X-MEDIA-SEQUENCE | 最初のTSファイルのシーケンス番号を指定します |
#EXT-X-KEY | TSファイルの暗号化方法を指定します |
#EXT-X-PROGRAM-DATE-TIME | TSファイル内の最初のサンプルの日付/時刻を指定します |
#EXT-X-ALLOW-CACHE | クライアントがダウンロードしたメディアファイルをキャッシュできるかどうかを指定します |
#EXT-X-PLAYLIST-TYPE | プレイリストのタイプ(EVENTまたはVOD)に関する情報を提供します |
#EXT-X-ENDLIST | M3U8ファイルの終了を示します |
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ファイルの構造は次のとおりです:
ヘッダーの後に、いくつかのタグ付きデータブロックがあります。タグ形式はFLVカプセル化と一致しています。オンライン再生中は、通常、1つのSWFファイルだけを取得する必要があります。
HDLの再生プロセスは次のステップに従います:
- HTTP経由でSWFファイルを取得します
- SWFファイルを使用してFLVファイルを取得します
- FLVファイルの内容をデカプセル化、デコード、表示します
- SWFファイルのEndTagに達するまで、FLVファイルデータを継続的に取得し、処理、デコード、表示します
このプロセスは、HDLがHTTPを単なる初期ファイル取得だけでなく、全体のストリーミングプロセスにも利用していることを示しており、プロトコルの機能に不可欠な部分となっています。
SWFファイルに関する詳細情報は、Adobe Developer Centerを参照してください: http://www.adobe.com/devnet/swf.html
結論
HTTPはウェブ通信の背骨を形成し、HLSのような現代のストリーミング技術において重要な役割を果たしています。その構造、ステータスコード、およびストリーミングプロトコルにおける応用を理解することは、OTTおよびRTC分野で働く開発者にとって不可欠です。ウェブが進化し続ける中、HTTPは基本的な技術として残り、新しい要件やユースケースに適応しながら、デジタルコミュニケーションの変化する風景で重要な役割を果たしています。