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");
でいけるはず。