뭘 이런걸..

Posted
Filed under Tech/프로그래밍
한 2달은 지난일이지만, 공유하는 것도 괜찮을 듯 해서 작성합니다.

회사에서 Game 의 version.ini 다운로드시에 cache 의 문제로 웹서버에서 강제로 NoCache header 를 출력하도록 한 적이 있습니다.

setenv.add-response-header = ( "Expires" => "Thu, 01 Jan 1970 00:00:00 GMT", "Cache-Control" => "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", "Pragma" => "no-cache" )


위와 같이 lighttpd 에서 설정을 한 후에, test 까지 마치고 귀가를 했었는데, 새벽에 난리가 나고 말았습니다. 새벽부터 전화가 불같이 오더군요. 직감적으로 어제 설정한 no-cache 가 문제가 된것 같아서 일단, 설정을 rollback 하고나니 역시나 문제가 해결이 되었습니다.

황당한 에러메시지

문제 해결후, 출근을 해서 장애 리포트도 작성할 겸 도대체 왜 문제가 되었는지 검증을 하던 중, 황당함에 어쩔 수 없는 사실을 발견하게 됩니다. IE 또는 WinInet API 로 다운로드를 받을 경우, ini 확장자가 no-cache header 를 받을 경우 WinInet API 차원에서 좌측과 같은 에러 메세지를 출력을 하는 겁니다.

다른 browser 에서는 모두 정상적으로 받아지는데 왜 IE 에서만 이런 문제가 발생할까 고민을 하고 검색을 하다가, 로그를 봐도 200 코드 반환을 했고, 믿을 수가 없어서 packet dump 를 떠 보았는데, 서버측에서도 정상적으로 파일 내용을 보내고 있었고, 심지어는 client 에서도 파일을 받았음에도 불구하고 IE (WinInet API) 만 유독 이런 처리를 하는 것으로 보아서, WinInet 자체적으로 이런 짓거리를 한다고 밖에 단정할 수 없겠더군요. --; 그래서 설정 값을 하나씩 제거하면서 테스트를 해 본바, no-cache 값이 들어갈 경우에만 발생을 하고 있었습니다.

MSDN 의 WinInet 의 Cache 관련 문서를 찾아봐도 이런 언급은 없었는데, 검색을 하다가 http://support.microsoft.com/kb/323308 문서를 발견하게 됩니다. 물론 상관은 없지만 HTTPS protocol 에서의 WinInet API 의 이상 작동에 관한 기술 문서더군요. 순간.. 버그가 또 있었구나.. 하는 암울한 생각만.. T.T 결국에는 장애 리포트만 쓰고선, 다음 부터는 꼭 IE 에서 테스트 하자는 결의만 다지고 허탈함을 달랠길이 없더군요.

혹시라도, Game 관련 회사의 Download Server 를 운영하신다면, Cache-Control header 에 no-cache 를 출력해서 저같은 경우를 당하지 말기를 바라면서 포스팅을 해 봅니다.
2006/12/18 00:45 2006/12/18 00:45
김정균

흠.. 간만에 이 이슈로 google 신께 질문하다가.. 얻은 답..

Expires: 0

으로 하면 IE 에서 됩니다. _--;