ごく普通の在日

Accept-Range、部分的レスポンスってやつ

何回かはまっていたからブログ残しておく。

ブラウザーからサーバーにあるメディアファイルにアクセスする時、ヘッダーのContent-Typeの設定がたとえばPHPの場合
//*.mp3の場合
header("Content-type: audio/mpeg");

//*.wmaの場合
header("Content-type: audio/x-ms-wma");

//*.mid, *.midiの場合
header("Content-type: audio/midi");

上記のようにヘッダー設定することができる。

サーバー側がファイルのパスを渡さずに、file_get_contentsなどでファイルを出力しているとき、
ヘッダーの設定をしなくてもFirefox、Chromeブラウザーからアクセスするとメディアファイルをダウンロードできるが、
IEの場合はアレだからそうはうまくいかない。

また、IEでメディアのリンクにアクセスしてファイルをダウンロードせずにメディアプレイヤーで再生することができる。
(Mac環境でSafariからだとQuickTimeで再生する?詳しく検討してないので)
そのためにヘッダーのAccept-Rangeが必要。

Accept-Rangeとは?
返答したデータのレンジ。単位はバイト。サーバーが、部分的レスポンスのサポート有無や、リソースのレンジ単位を記述するためのフィールド
詳しいことは以下の参考サイトが詳しく書かれてある。
Accept-Range
部分的レスポンス
レンジ単位とは

ということで、対応するためには
header('Accept-Ranges: bytes');
header("Content-type: audio/midi");

でいけるはず。
何回かはまっていたからブログ残しておく。

ブラウザーからサーバーにあるメディアファイルにアクセスする時、ヘッダーのContent-Typeの設定がたとえばPHPの場合
//*.mp3の場合
header("Content-type: audio/mpeg");

//*.wmaの場合
header("Content-type: audio/x-ms-wma");

//*.mid, *.midiの場合
header("Content-type: audio/midi");

上記のようにヘッダー設定することができる。

サーバー側がファイルのパスを渡さずに、file_get_contentsなどでファイルを出力しているとき、
ヘッダーの設定をしなくてもFirefox、Chromeブラウザーからアクセスするとメディアファイルをダウンロードできるが、
IEの場合はアレだからそうはうまくいかない。

また、IEでメディアのリンクにアクセスしてファイルをダウンロードせずにメディアプレイヤーで再生することができる。
(Mac環境でSafariからだとQuickTimeで再生する?詳しく検討してないので)
そのためにヘッダーのAccept-Rangeが必要。

Accept-Rangeとは?
返答したデータのレンジ。単位はバイト。サーバーが、部分的レスポンスのサポート有無や、リソースのレンジ単位を記述するためのフィールド
詳しいことは以下の参考サイトが詳しく書かれてある。
Accept-Range
部分的レスポンス
レンジ単位とは

ということで、対応するためには
header('Accept-Ranges: bytes');
header("Content-type: audio/midi");

でいけるはず。