2010-01-04 5 views
6

"다운로드 링크"를 구현하고 보고서 테이블 옆에 넣으려고했는데 사용자가 CSV 파일을 다운로드하여 Excel과 같은 응용 프로그램에서 열 수 있습니다.IE에서

레코드는 사용자가 작성한 쿼리를 기반으로 동적으로 생성됩니다.

그래서 어딘가에 내 컨트롤러에 같은있다 : 이것은 모두 파이어 폭스 & 크롬에서 작동

response.headers['Content-Type'] = 'text/csv' 
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv' 
return response.stream(dynamically_generated_csv, request=request) 

하지만, IE에서 실패합니다. 내가 응답 헤더를 인쇄 할 때

, 나는 몇 가지 헤더 web2py에 의해 내 대답에 추가 된 것을 발견 : '만료', '캐시 제어', 등 ...

을 그리고 난 '캐시를 제거 할 때 다음을 수행하여 제어 헤더를 추가하십시오.

del response.headers['Cache-Control'] 

IE에서 작동합니다.

IE에서 'Cache-Control'이 설정된 값으로 설정된 다운로드 가능한 파일을 처리하는 데 문제가있는 것처럼 보입니다.

자, 내 질문은 :

  • 이유는 암시 적으로, 이러한 응답 헤더를 추가 web2py 무엇입니까? 어쩌면 그것을 없앨 수있는 방법이 없습니까?

  • 이 경우 'Cache-Control'헤더를 삭제하면 부작용이 있습니까?

미리 감사드립니다.

+2

이것은 특정 버전의 IE에서 알려진 결함 : http://support.microsoft.com/kb/323308 –

+0

Django를 사용할 때 응답 헤더는 내가 명시 적으로 설정 한 것입니다. 그러나 web2py의 경우에는 개발자의 지식없이 응답 헤더가 추가되었으므로 프레임 워크의 디자인이 좋지 않을 수도 있으며 사람들이 후드에서 발생하는 상황을 파악하는 데 드는 비용이 듭니다. – satoru

+2

정적 파일을 제공 할 때 web2py는 캐시 헤더를 설정하여 브라우저가 이미 서버에있는 파일을 요청하지 않고 서버에서 변경하지 않았는지 확인합니다. 동적 콘텐츠를 제공 할 때 web2py는 브라우저가 캐시하지 않도록합니다 (이것이 내가 믿는 경우). web2py의 철학은 다른 프레임 워크의 철학과 다릅니다. 가능한 한 많은 것을 해드 리기 위해 howto (이 경우 브라우저 캐시를 관리하는 방법)를 배울 필요가 없습니다. 문제는 IE 버그입니다. 나는 이것을 web2py 메일 링리스트에 올려서 다른 개발자들과 토론 할 것이다. – mdipierro

답변

5

캐쉬 제어 헤더를 보내고 있지만 IE에 다운로드 한 파일에 버그가 있음을 잘 모릅니다.

IE의 경우 캐싱을 활성화해야합니다 (). IE에서 파일 (예 : Excel 파일)을로드 할 때 Excel에서 캐시 디렉토리에서 파일을로드하므로 캐시하지 않으면 Excel (또는 다른 앱)에서 파일을로드하지 못합니다.

에릭 법률 주제에 (MSFT) : http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no-cache.aspx

업데이트 : 만약 당신이 방금 다운로드를 강제하려는하지만 ... 예를 들어, IE 창에 Excel 파일을로드하지 않으려면 첨부 파일의 전체 헤더를 설정해야합니다.

//PHP style 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
+0

Thx. 그러나 이것이 내가 만난 동일한 문제가 아닐지도 모른다. 내가 명시 적으로 'Content-Disposition'을 'attachment'로 설정 했으므로 IE에서 파일이 열리지 않게됩니다. – satoru

+1

Eric의 블로그 항목에서 언급 한 것처럼 캐시 제어 헤더보다 더 문제가되는 것은 보안에 관심이있는 사람들이 캐싱에만 국한되지 않고 '암호화 된 페이지를 디스크에 저장 안 함' SSL *을 사용하는 사이트의 모든 파일을 디스크에 저장하지 못하게합니다. 디자인에 결함이 있습니다. – Archimedix

+0

Satoru - 내용 처리 작업을 수정 했습니까? 나는 지금도 같은 문제를 겪고있다. –

0

이 질문에 대한 답변은 아니지만 원래의 문제를 해결합니다.

CSV 파일에 대한 링크 문자열을 쿼리하기 위해 timestamp (고유 한 것으로 충분 함)를 추가하기 만하면됩니다. 그것은 나를 도왔다.

2

https (ssl)을 사용하여 다운로드 링크가 있습니까? 그렇다면 IE가 캐싱되도록 설정된 경우 다운로드를 처리 할 수 ​​없습니다. 이것은 IE의 알려진 문제점입니다.

+0

아니요, 저는 단순한 HTTP 만 사용합니다. 당신의 설명을 위해서 – satoru