2011-10-27 6 views
0

오디오 리소스에 대한 GET 요청에 응답하는 PHP 스크립트가 있습니다. 같은 오디오 파일을 다운로드하는 사용자에 대한 필요가 없습니다PHP로 오디오에 대한 GET 요청 캐싱

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

때마다 그래서 그것을 캐시 싶습니다 :는 HTML5 오디오 태그와 같은 오디오 파일을 요청합니다.

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

... 

echo file_get_contents($path); 

을하지만 크롬 개발자 도구의 네트워크 탭을 볼 때 나는 "캐시에서"말보다는 오디오 클립 매번-다운로드 다시 볼 나는 응답에서 보면 : 내 PHP 파일에서 내가 가진 헤더 나는 내가 설정 한 Cache-Control 헤더를 보았다. 왜 이걸 무시하니? 아미도 잉?

+0

헤더 사용 ("만료 : 2050 년 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:이라는 두 번째 요청의 헤더가 보이십니까?

파일을 다시 보내지 않으려면 HTTP/1.1 304 Not Modified으로 응답해야합니다. Apache를 사용하는 경우 apache_request_headers()의 결과에서 헤더를 확인할 수 있습니다. Apache를 사용하지 않는다면 이것을 처리하기 어려울 수도 있습니다. 웹 서버가 헤더를 환경 변수로 설정하는 방법을 찾아야하므로 $_ENV 또는 $_SERVER에서 사용할 수 있습니다. mod_rewrite를 사용하여 아파치에서 이것을 할 수있는 방법이있다. (위에서 링크 한 페이지의 최신 코멘트를 보라) 다른 서버 환경에서도 가능하다.

HTTP 1.1에서 캐시하면이 동작이 허용되고 (실제로 권장됩니다.) 이는 캐시 된 복사본이 항상 최신 상태임을 의미합니다.