underfront.com

PDF를 Load한 이후 발생되는 Mobile Safari 버그

지난 12월 모 공공기관 프로젝트를 마무리 하고 당시 CMS에서 변환되는 PDF를 제대로 보여주지 못하는 부분을 놓쳐 얼마전 해당 부분을 수정하였으나, 개발자가 해당 부분을 수정하고 PDF를 테스트하는 과정에서 생각지도 못한 Mobile Safari 오류를 발견 하였습니다.

20120308-161547.jpg

Safari – SECURITY 오류

해당 오류는 사실 웹 퍼블리셔가 단독으로 찾아내기는 조금 어려운 측면이 있는 오류로 함께 공유하고자 글을 쓰게 되었습니다.

해당 오류는 보안 오류로 Mobile Safari의 ‘콘솔 디버깅’으로 보면 “SECURITY_ERR: DOM Exception 18″라는 다소 생소한 오류를 보실 수 있습니다. 관련 자료를 찾아보니 정확한 파악은 어렵지만 HTML5의 <canvas>태그와 함께 제작된 Javascript나 localStorege를 사용한 Javascript에서 주로 발생되는 오류인 것 으로 파악 되었습니다.

재현 방법은 다음과 같습니다. 커뮤니티 게시판이나 공공기관 사이트에서 웹브라우저가 첨부파일을 강제 다운로드 시키는 PDF파일을 찾습니다. 그리고, iOS의 기기에서 Mobile Safari 로 해당 URL을 Open 합니다.

Mobile Safari에서는 PDF파일을 정상적으로 보여주게 됩니다. 하지만 문제는 여기서 부터 발생 됩니다. 해당 탭에 스크린샷과 같은 보안 오류가 발생됩니다. 그리고, 해당 오류가 해당 탭에 그대로 유지되어 해당 사이트는 물론 다른 사이트를 열어도 Javascript가 제대로 Load되지 못합니다.

생각보다 꽤 크리티컬한 오류라고 생각되어 지는데요. 이 오류는 iOS 4.x 버전에서는 발생되지 않고, iOS 5.0 이후 버전에서 발생되고 있으며, 얼마전에 업데이트 된 iOS 5.1에서도 동일한 증상을 보였습니다. 지금은 Apple Bug Report 사이트에 해당 오류를 Report 한 상태입니다.

여기서 부터는 Back-end 영역 입니다만 첨부파일을 강제로 다운로드 시키는 Server-side Source에서는 아마도 다음과 같이 HTTP Header를 변형시켜서 작동 시킬 것으로 생각 됩니다.

< ?
$file = file_get_contents('pdf_file_test.pdf');
HEADER("Content-Type: application/octet-stream");
HEADER("Content-Disposition: attachment;filename=pdftest.pdf");
echo $file;
?>

서버상에 저장되어져 있는 PDF파일을 Binary형태로 불러와 HTTP Header에 Content-Type 과 Content-Disposition을 지정하여 웹 브라우저에 첨부파일이라는 것을 알려주게 됩니다. 그리고, 첨부파일이니까 다운로드 하라고 알려주게 되죠.

바로 이 부분이 문제인데요. iOS 기기를 사용하시는 분은 알고 계시겠지만 Mobile Safari는 해당 첨부파일이 어떤 종류인지는 중요하지 않고 일단 무조건 Mobile Safari 웹브라우저 상에서 첨부파일을 표시해 주게 됩니다.

예컨대, PDF, DOC, XLS과 같은 Office 형태의 파일은 미리보기 형태로 제공되고 HWP, ZIP과 같은 파일은 아이콘과 파일이름을 표시하여 다른 App에서 열 수 있도록 제공합니다. 즉, PC용 웹브라우저나 안드로이드 웹브라우저와 같이 ‘강제다운로드’를 할 수 없는 구조인 것이죠.

Content-Disposition에서 attachment는 ‘얘는 첨부파일이야~’라고 웹브라우저에 알려주면 웹브라우저는 파일 형태가 어떤 것이든 다운로드 창을 띄워주게 됩니다. 그러나 Mobile Safari는 그럴 필요가 없죠.

그래서, 제 경우에는 이렇게 해결 하였습니다. attachment를 inline으로 바꿔 버린거죠. 이렇게 되면 Mobile Safari에서는 보여주던 대로 보여주게 되지만 위와 같은 보안 오류는 더 이상 발생하지 않는 것이죠.

이 오류가 특이한 점은 *.doc, *.xls, *.ppt과 같은 파일은 이상이 없는데 유독 PDF파일에서만 문제가 발생된다는 점입니다. 아무튼, Apple에서 해당 오류를 얼른 수정했으면 하는 바램입니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

*