2011-10-27 6 views
0

私はオーディオリソースのGETリクエストに応答するPHPスクリプトを用意しています。同じオーディオファイルをダウンロードするユーザーのための必要はありませんPHPでオーディオのGETリクエストをキャッシュする

<audio src="get_audio.php?f=fun" preload></audio> 

たびに私はそれをキャッシュしたいと思います:HTML5オーディオタグは、次のようなオーディオファイルを要求します。私は私のPHPファイルで:

header("Cache-Control: max-age=2419200"); 
header("Content-Type: audio/mpeg"); 

... 

echo file_get_contents($path); 

が、私はChromeデベロッパーツールの[ネットワーク]タブを表示したとき、私はそれがオーディオクリップ毎回、ダウンロードし直すのではなく言っていることがわかり、「キャッシュから」と私は応答で見ればヘッダー私が設定したCache-Controlヘッダーが表示されます。それはなぜこれを無視するのだろうか?私は?

+0

ヘッダーで試してください( "Expires:Mon、2020年12月26日00:00:00 GMT")。残念ながら –

+0

は運がありません。 – rewolf

答えて

0

は、それは私がPHPでこれをやったので、しばらくして、しかし、追加してみます:キャッシュ制御ヘッダー上記

header("Pragma: public"); 

私はまた、あなたがヘッダ期限切れになる必要があると思う:あなたはそれが間違って起こってどこデバッグするPHPでget_headers()関数を使用し始めることができること以外に

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+2419200) . ' GMT'); 

を。

0

If-Modified-Since:という2番目のリクエストのヘッダーがありますか?

これは、ファイルを再度送信したくない場合は、キャッチして解析して応答する必要があるため、HTTP/1.1 304 Not Modifiedと応答します。 Apacheを使用している場合は、結果がapache_request_headers()のヘッダーであることを確認できます。 Apacheを使用していない場合は、これを処理するのが難しいかもしれません.Webサーバーがヘッダーを環境変数として設定する方法を見つけなければならないかもしれないので、$_ENVまたは$_SERVERで利用できます。 mod_rewriteを使用してApacheでこれを行う方法があります(上記のリンク先の最新コメントを参照)。そうすれば他のサーバー環境でも可能です。

HTTP 1.1でのキャッシュは、この動作を許可します(実際には奨励します)。つまり、キャッシュされたコピーは常に最新の状態になります。

関連する問題