관리 메뉴

Life goes slowly...

[JSP] Microsoft 웹브라우저에서 파일을 다운로드 시 확장자가 바뀌는 이유 (IE, Edge) 본문

프로그래밍/Web

[JSP] Microsoft 웹브라우저에서 파일을 다운로드 시 확장자가 바뀌는 이유 (IE, Edge)

빨강소 2020. 10. 8. 08:47
728x90
반응형

.

웹 프로그래밍 개발시 웹 브라우저에서 File 을 업로드 시에 암호화하여 압축하고 확장자를 zip이 아닌 다른 형식의 확장자로 저장한 뒤에 Download 할때 확장자가 zip으로 강제적으로 바뀌는 경우가 있습니다.

영재발굴단 블로그<br/>
<input type="button" value="download" onclick="location.href='test.gg'">

웹 페이지 내의 Download 버튼을 클릭 할 때 test라는 파일을 다운로드하게 됩니다.

여기서 test.gg 파일은 프로그래밍내의 중요한 내용이 있기에 파일을 암호화 후에 zip 파일로 압축하여 확장자만 gg 로 변경한 파일입니다.

 

파이어폭스나, 사파리, 오페라, 크롬 같은 브라우저에서는 원래 확장자 포맷 형식으로 test.gg 파일로 다운로드되지만

마이크로소프트의 IE에서는(현재는 Microsoft Edge) 확장자가 zip으로 강제적으로 변경되어 다운로드됩니다.

 


 

이러한 현상이 발생하게 되는 이유는 MIME TYPE이 명시되지 않았을 경우 웹브라우저에서 파일의 처음 200byte를 읽어서 스스로 MIME Type을 결정하고, 그에 따라 파일의 확장자를 바꾸게 됩니다.

 

http://msdn.microsoft.com/en-us/library/ms775148%28VS.85%29.aspx

 

Handling MIME Types in Windows Internet Explorer (Windows)

Handling MIME Types in Windows Internet Explorer 07/13/2016 4 minutes to read In this article --> When Windows Internet Explorer downloads a file, it goes through several steps to ensure that the type of the file matches the MIME type declared by the HTTP

docs.microsoft.com

 

이러할 때에는 적절한 MIME Type을 지정해 주면 되는데, 웹서버의 web.xml에서 mime-mapping들 사이에 넣어주면 됩니다.

<mime-mapping>
<extension>gg</extension>
<mime-type>application/octet-stream</mime-type>
</mime-mapping>

 

자세한 내용은 Google에서"ie file download extension no content-type"로 검색하면 됩니다.

 

문제점 파악!!

Web - Server에서 클라이언트 어떤 리소스를 Return할 때, Web - Server는 HTTP Header에 리소스에 관련된 내용을 붙여서 전송합니다. 저장된 파일이 MIME-Type에 정의되지 않은 사용자 지정 타입이라면, Content-Type application/octet-stream으로 설정하고 Return 합니다. 형식에 대한 정보를 자세히 알 수 없기 때문에 8비트로 된 일렬의 데이터로 정 의해버리는 것입니다.

 

 

Chrome 과 Firefox에서는 application/octet-stream을 그래도 해석하여 요청한 파일을 처리하지만 인터넷 익스플로러(IE) 나 Microsoft의 Edge에서는 MIME-TYPE에 대한 정보가 없을 경우 크롬과 파이어폭스와는 다르게 동작합니다.

 

IE나 Edge 같은 웹 브라우저 경우는Content-Type이 있는 경우에는 Content-Disposition 헤더를 참조하고 없는 경우에는 HKEY_CLASSES_ROOT \ MIME \ Database \ Content Type에서 해당 MIME 유형에 대한 레지스트리 항목을 확인하여 그에 따른 확장명에 대한 확장 키를 확인합니다.

 

만약에 HTTP Header에서 파일이 "content-disposition = attachment"로 표시되어 있으면 인터넷 익스플로러나 Microsoft의 Edge의 웹브라우저 에서는 캐시에 이동하기 전에 URL로부터 최종 파일로 취급하고 확장자 이름을 바뀌지 않습니다. Content-disposition의 값을 attachment으로 설정하면 익스플로러에서도 파일의 확장자 변경 없이 원본 그대로 다운로드합니다.

 

728x90
반응형
Comments