From: SeungWoo Baek (Hanbit)
Sent: Wednesday, December 21, 2005 5:20 PM
To: '김병은'; seungmkim@lgcns.com; htchong@lgcns.com; gunhoroh@lge.com
Cc: jicpark@lgcns.com; kimyo@lgcns.com; hjeim@lgcns.com; jongboklee@lgcns.com;
yuminlee@lgcns.com; taeykang@lgcns.com; sunghwanlim@lgcns.com; moonjunghye@lgcns.com;
Yong Hee Park; 문 상록; 조 재경; 정 주성; swkim@shift.co.kr
Subject: RE: Gauce와 Windows XP SP2상의 데이터수신 에러건 - SRK051128600134
마이크로 소프트 고객지원부 백승우입니다.
현재 발생하고 있는 에러에 대해 다음과 같은 정보를 참조하시기 바랍니다.
1.몇번은 잘 동작하다가 안되기 시작하면 계속 안 되는 이유는 무엇인가?
File 시스템의 이벤트 비교 결과
에러 없이 정상 출력되는 경우
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\i-sebaek\Local Settings\Temporary Internet Files\Content.IE5
\T40FHP8L\nMgtListCmd
&deptCd=ALL&explStCd=N&counselSubTyCd=ALL
&recpAgCd=ALL&calbakDept
Cd=ALL&calbakAgCd=ALL&frDate=11122005
&toDate=21122005&dateGubun=1
&schGubun=1&schValue= |
NOT FOUND |
CREATE |
상동 |
SUCCESS |
OPEN |
상동 |
NOT FOUND |
WRITE |
상동 |
SUCCESS |
WRITE |
상동 |
SUCCESS |
OPEN |
상동 |
SUCCESS |
OPEN |
상동 |
SUCCESS |
READ |
상동 |
SUCCESS |
WRITE |
상동 |
SUCCESS |
READ |
상동 |
SUCCESS |
WRITE |
상동 |
SUCCESS |
READ |
상동 |
SUCCESS |
QUERY INFORMATION |
상동 |
SUCCESS |
CLOSE |
상동 |
SUCCESS |
READ |
상동 |
END OF FILE |
CLOSE |
상동 |
SUCCESS |
OPEN |
상동 |
SHARING VIOLATION |
QUERY INFORMATION |
상동 |
SUCCESS |
CLOSE |
상동 |
SUCCESS |
에러가 발생되어 아무런 내용도 출력이 안 되는 경우
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\i-sebaek\Local Settings\
Temporary Internet Files\Content.IE5
\T40FHP8L\nMgtListCmd&deptCd=ALL&explStCd=N
&counselSubTyCd=ALL&recpAgCd=ALL&calbakDept
Cd=ALL&calbakAgCd=ALL&frDate=11122005&toDate=21122005
&dateGubun=1&schGubun=1&schValue= |
SUCCESS |
QUERY INFORMATION |
* 동일 이벤트 150 번 반복 |
SUCCESS |
|
|
|
정상적으로 Cache 가 생성될 경우 다음과 같은 절차로 IE 가 동작합니다.
Content.IE5 안에는 Cache 를 저장하기 위한 폴더가 존재합니다. 하단의 그림과 같은 형식으로
존재하며 index.dat 는 Cache 에 저장되어 있는 파일들에 대한 DB 파일입니다.
IE 는 HTTP 요청이 있을 경우 위 그림의 폴더 중 하나를 정하여 그 폴더에 Cache file 들을 생성합니다.
우선 정해진 Cache 폴더에 현재 저장할 Cache 파일의 이름이 존재하는지 검사하여 없으면 새로
생성을 하고 들어온 데이터를 Write 합니다.
처음에 제시된 표에 보시면 이러한 동작이 정상적으로 되고 있음을 확인하실 수 있습니다.
하지만 2번째 에러가 발생할 시에 데이터를 보시면 동일 파일이름으로 계속하여 파일 존재 여부를
150번 검사합니다. 이는 전에 말씀 드렸던 파일 이름의 변경으로 때문에 발생되는 버그입니다.
요청 URL 을 보고 IE 는 하단의 표와 같이 Cache 의 이름을 정하게 됩니다. 처음 IE 는
GauceChannelServlet[1].~~~ 로 이름을 정한 후에 Cache 폴더에 위 이름이 존재하는지 조사합니다.
존재 한다면 [] 안의 숫자를 증가시킨 후에 다시 물어 보아 파일이 존재 하지 않을 때 까지
계속적으로 물어 봅니다.
이 때 Temporary Internet Files 의 패스 + Cache 파일의 이름이 260 이상이 되면 앞 부분부터
잘리게 됩니다. 그러므로 IE 가 아무리 [] 의 숫자를 증가 시켜도 Full Path가 260 이상이라면
이 증가되는 [숫자] 부분이 파일 이름에서 빠지게 되므로 IE 는 동일한 이름 (하단의 “에러일 경우” )으로
계속적으로 150 번 요청을 한 후에 결국 Cache를 남길 수 없다고 판단하고 Cache를 남기지않습니다.
이러한 이유로 OnDataAvailable 이 호출되지 않고 OnStopBinding 이 호출됩니다.
요청 URL |
GauceChannelServlet?X-UIClient=G40/D1,1,1,53&cmd=cls.service.command.
GetExplanMgtListCmd&deptCd=ALL&explStCd=N&counselSubTyCd=ALL
&recpAgCd=ALL&calbakDeptCd=ALL&calbakAgCd=ALL&frDate=
01102005&toDate=29102005&dateGubun=1&schGubun=1&schValue= |
에러 일 경우 |
xplanMgtListCmd&deptCd=ALL&explStCd=N&counselSubTyCd=ALL
&recpAgCd=ALL&calbakDeptCd=ALL&calbakAgCd=ALL&frDate=01102005
&toDate=29102005&dateGubun=1&schGubun=1&schValue= |
정상 일 경우 |
GauceChannelServlet[1].GetExplanMgtListCmd&deptCd=ALL&explStCd=N
&counselSubTyCd=ALL&recpAgCd=ALL&calbakDeptCd=ALL&calbakAgCd=ALL&frDate=
01102005&toDate=29102005&dateGubun=1&schGubun=1&schValue= |
그러므로 정상적인 동작은 IE 가 정해준 Cache 폴더에 저희가 생성한 Cache 파일이 없을 때 까지
계속됩니다.
이는 Windows의 버그가 맞습니다. 이에 대해 현재 저희 쪽에 보고 되어 있는 버그는 없는 상태입니다.
이 버그에 대한 저희 측의 다음 Action 은 LG 측과 협의 후에 결정되어야 할 사항이라고 생각합니다.
2.왜 SP2 에서만 유독 발생하는가?
SP1의 파일 이벤트 로그를 보시면 이유를 쉽게 아실 수 있습니다.
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\WINDOWS\Downloaded Program Files\ToinbData.dll |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[1] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[2] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[3] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[4] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[5] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[6] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[7] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[8] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
NOT FOUND |
CREATE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
WRITE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
WRITE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
OPEN |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
OPEN |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
READ |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
WRITE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
READ |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
WRITE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
READ |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
CLOSE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
READ |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
END OF FILE |
CLOSE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
OPEN |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SHARING VIOLATION |
QUERY INFORMATION |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
CLOSE |
C:\Documents and Settings\test\Local Settings\Temporary Internet Files\
Content.IE5\KL2B4TM3\GauceChannelServlet[9] |
SUCCESS |
위 로그는 정상적인 IE 의 동작을 보여 주고 있습니다. 요청된 URL 에 대해 정상적으로 [1] 부터
파일이 존재하는지 조사하여 “NOT FOUND” 가 나올 때까지 계속적으로 숫자를 증가시켜
GauceChannelServlet[9]로 파일을 생성 Write와 Read 를 하고 있습니다.
Cache 파일 이름을 정할 때 SP1 과 SP2 는 동작이 상이합니다. 이러한 이유는 SP2 에서 강화된
“MIME-handling file type agreement enforcement” 때문입니다.
( 첨부된 문서를 참조하시기 바랍니다. “MIME-handling file type agreement enforcement” 관련
내용은 49 페이지에 있습니다. )
SP1 에서는 서버로부터 파일이 클라이언트로 들어올 시에 다음과 같은 절차로 파일의 MIME Type을
정하게 됩니다
File name extension, the corresponding ProgID and CLSID for the registered handler of that file name
extension.
Content-Type from the HTTP header (MIME type), the corresponding ProgID, and CLSID for the
registered handler of that Content or MIME type.
Content-Disposition from the HTTP header.
Results of the MIME sniff.
하지만 SP2 는 이러한 절차가 더욱 엄격해져서 확장자명이 MIME 타입과 다르면 IE 는 파일의
이름을 변경하여 이러한 Mismatch 를 수정하려고 합니다.
이러한 과정은 위에서 언급된 “요청 URL 과 변경된 Cache 파일 이름 관련 표”를 보시면 이해되시리라
생각합니다.
In Windows XP Service Pack 2, Internet Explorer is more restrictive about executing a downloaded
file that could be dangerous.
Internet Explorer will enforce consistency between how a file is handled in the browser and
how it is handled in the Windows Shell. As the file is downloaded into the cache,
Internet Explorer will compare the MIME-type of the cache file to the extension of the cache file.
If there is a mismatch between the MIME-type and the file name extension, Internet Explorer
will attempt to reconcile that mismatch by renaming the file in the cache.
현재의 경우 cache 파일의 MIME Type 은 하단의 절차에 의해 결정되었습니다.
File Name Extension : GauseServlet 으로 종료 되므로 해당 사항 없음.
Content-Type : HTTP 헤더에 관련 정보 없으므로 해당 사항 없음.
Content-Disposition header : 사용 안하므로 또한 해당 사항 없음.
MIME sniff : SP1 에서는 sniff 절차를 거쳐 HTML 로 인식되어 졌으나 SP2 에서는 그렇게
동작되지 않았습니다.
그 이유는 하단의 내용을 참조 하시기 바랍니다. ( 첨부한 문서 51 페이지를 참조하시기 바랍니다. )
MIME sniffing file type elevation
Detailed description
One of the backup criteria for determining a file type is the result of the MIME sniff. By examining
(or sniffing) a file, Internet Explorer can recognize the bit signatures of certain types of files. In
Windows XP Service Pack 2, Internet Explorer MIME sniffing will not promote files of type text/plain
to more dangerous file types in the restricted sites zone. For example, files that are received as
plain text but that include HTML code will not be promoted to the HTML type, which could contain
active content.
그러므로 SP1 과 SP2 는 동일한 서버의 응답을 다른 MIME Type 으로 받아 들여 cache 파일의
naming Rule 이 달라지게 되었고
이로 인해 1번에서 언급된 에러가 SP2 에서만 발생합니다.
3.왜 LGE 의 서버를 사용할 경우에만 에러가 발생하는가?
Network Monitoring 은 에러가 발생할 때와 안 할 때 모두 동일한 결과를 보여 줍니다.
일반적인 IIS Header 와 비교해 보시기 바랍니다.
정상적인 HTTP HEADER
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Fri, 16 Dec 2005 00:10:41 GMT
Content-Length: 228
Content-Type: text/html
Cache-control: private
LGE 서버의 HTTP HEADER
HTTP/1.1 200 OK
Server: Netscape-Enterprise/6.0
Date: Fri, 16 Dec 2005 00:16:13 GMT
Connection: close
SP2 의 향상된 인증으로 인해 웹 페이지에 대한 정확한 HTTP HEADER 가 필요하고 이를
정확하게 기술하셔야 SP2 에서 정상적으로 동작됩니다.
위의 LGE 서버의 Header는 정보가 정확히 기술이 안되어 있으므로 LGE 서버를 이용할 시에는
Content-Type 정보를 구할 수 없으므로 2번에서 언급된 MIME 타입을 결정하는 절차를 잘못
진행하게 됩니다.
그러므로 LGE 에서 보내주는 GauseServlet 과 연동 시에는 정상적인 동작이 불가능 하게 됩니다.
해결 방법 :
전의 메일에서 제시하였던 기존의 해결 방법과 크게 달라지는 것은 없습니다.
1. 다음과 같은 정보를 참고하시기 바랍니다.
How do I resolve these issues?
Web developers must change their Web servers to host files, using consistent content-type
headers and file name extensions. If this is not possible, Web developers can use the
“Content-disposition=attachment: HTTP header to directly send the file to its extension handler
rather than to the MIME handler.
Note that file downloads with the “Content-disposition=attachment” header will prompt the
user to open or save the file.
If you have developed a MIME handler and intentionally rely on Internet Explorer to execute
files that your MIME handler rejects, you will need to make changes in your MIME handler to
accommodate this change.
The most secure change would be to natively handle the file directly in the MIME handler
rather than rejecting the file.
이를 위해 전의 메일에서 제시하였던
Servlet 에서 setContentType 을 명시적으로 호출
현재 Response header 에 Content-Type 정보가 없습니다.
Servlet 에서 setContentType(“text/Html”)을 명시적으로 호출하여 Response Header에
관련 내용이 표시 되도록 해 주시기 바랍니다.
Or
GauseServlet 에 확장자명 추가와 그에 부합되는 MIME 타입을 웹 서버에 세팅 해 주시기
바랍니다.
Or
Content-disposition 헤더를 이용하여 주시기 바랍니다.
Or
POST Method 를 사용하셔서 File Path 를 줄이셔도 문제를 해결하실 수 있습니다.