WEB언어/PHP

[PHP] SSL 설정후 파일 다운로드 안되는 문제

saltdoll 2013. 7. 3. 17:49
반응형

ssl을 이용하여 https url로 구성된 웹사이트에서
파일 다운로드시 IE에서만 "다운로드할 수 없습니다" 라는 오류메시지가 나는 것을 발견했다.
IE9부터는 정상적으로 다운로드가 가능하게 지원을 해주는것 같지만
IE8 이하 버전 부터는 다운로드가 되지 않는다.

문제의 원인은 IE가 ssl을 통해 보안 웹 사이트와 통신 할때 캐시요청을 하게 되는데
파일 다운로드 헤더에 no-cache가 있으면 IE가 파일을 캐시 하지 않게 되어
파일다운로드를 하지 못한단다..

그리고 추가로 검색을 해보니,

Microsoft 고객센터에 이미 언급된 문제점이라는구나..


- HTTPS URL을 사용하여 Office 문서나 PDF 파일을 열 때 "다운로드할 수 없습니다." 오류 메시지가 나타난다

SSL을 통한 Internet Explorer 파일 다운로드가 "No-Cache" 헤더에서 작동하지 않는다

원인
    * Internet Explorer 6.0 SP1에서 암호화된 페이지를 디스크에 저장 안 함 확인란이 선택되어 있습니다.
    * 서버가 "Cache-Control: No Store" 헤더를 보냅니다.
    * 서버가 "Cache-Control: No Cache" 헤더를 보냅니다.




위 문제를 해결하기 위해서는 
서버가 Cache-Control 헤더로 No Store나 No Cache를 보내지 않도록 바꾸어주어야 한다.


Apache 서버의 http.conf 파일또는 .htaccess 파일을 수정하여 
다음과 같은 헤더명령을 추가 하거나,
==================================
<Files filename.php>
    Header unset Pragma
    Header unset Cache-Control
</Files>
==================================

PHP의 경우
다음과 같은 헤더를 다운로드 전에 보내주면 된다.
==================================
 Header("Pragma: dummy=bogus"); 
 Header("Cache-Control: private");
==================================

그리고 추가로!
파일 다운로드 헤더 파일에 no-cache 를 삭제해줘야 한다!

====================================================================

<download.php>
 Header("Content-Disposition: attachment; filename=$name"); 
 Header("Content-Type: text/html; charset=utf-8"); 
 Header("Content-Length: ".filesize("$fname")); 
 Header("Pragma:no-cache"); // 이놈을 삭제 해줘야 한다.

 Header("Expires: 0");
====================================================================



출처: http://www.whitesal.com/article/article_view.php?mode=3&no=1709

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)