IIS 7에서 동적 콘텐츠 압축을 설정했지만 Fiddler에서는 내 동적 페이지가 여전히 콘텐츠 인코딩(gzip) 없이 제공되고 있음을 보여줍니다.
정적 콘텐츠 압축은 동일한 서버에서 제대로 작동합니다.
중요한지는 확실하지 않지만 대부분의 동적 페이지는 coldfusion 페이지이며(Coldfusion은 ISAPI 확장으로 구성됨) IIS URL 재작성 모듈도 사용하고 있습니다.
이것은 내 applicationhost.config에서 가져온 것입니다.
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
...
<urlCompression doDynamicCompression="true" />
샘플 요청은 다음과 같습니다.
GET / HTTP/1.1
Host: web5.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
및 응답 헤더:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.0
...
Date: Mon, 22 Feb 2010 20:59:36 GMT
답변1
여기에 언급된 문제 해결 단계를 따를 수 있습니다.서비스 계정을 사용하는 IIS 6 및 IIS 7의 HTTP 압축
답변2
"Content-Endcoding: Chunked"는 서버 응답에 절대 표시되어서는 안 됩니다. "청크"는 완전히 HTTP 사양인 "전송 인코딩"의 별도 부분입니다. 잠재적으로 "전송 인코딩: 청크" 외에 "콘텐츠 인코딩: gzip"도 찾아야 합니다. 다음은 Google 홈페이지의 예입니다.
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 17 Feb 2010 13:43:22 GMT
Expires: Wed, 17 Feb 2010 13:43:22 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Wed, 17 Feb 2010 13:43:22 GMT
Server: igfe
Transfer-Encoding: chunked
Content-Encoding: gzip
이제 문제 디버깅에 관한 한 IIS7은 콘텐츠 유형을 기반으로 압축합니다. 따라서 "Content-Type: text/html"이 표시되면 페이지가 압축됩니다. 따라서 먼저 스크립트가 IIS가 압축 가능한 것으로 간주하는 콘텐츠 유형(text/*)을 반환하는지 확인하십시오.
또한 IIS는 기본적으로 HTTP/1.0 요청(Squid와 같은 일부 프록시에서 사용) 또는 요청이 프록시 서버(Via: 또는 X-Forwarded-For:)에서 왔음을 나타내는 헤더에 대해 페이지를 압축하지 않습니다. 이는 압축된 HTTP 콘텐츠를 제대로 처리하지 못하는 수많은 기존 프록시를 처리하기 위한 보수적인 기본값입니다. 서버 또는 사이트 수준에서 IIS 구성 파일을 편집하여 이 동작을 재정의할 수 있습니다.
마지막으로 클라이언트가 요청 시 "Accept-Encoding: gzip" 헤더를 보내고 있는지 확인하세요. 표준 브라우저라면 기본적으로 그렇게 되지만, wget이나 다른 도구를 사용한다면 그렇지 않을 수도 있습니다. 당신이 사용할 수있는바이올리니스트헤더와 데이터를 포함한 전체 HTTP 대화를 보려면
답변3
조사를 하다가 발견한 것이것이는 템플릿에서 HTML을 생성할 때 Coldfusion 측에서도 압축을 활성화해야 함을 나타냅니다. 정확한 소스를 찾을 수는 없지만 올바르게 기억한다면 동적 압축은 ASP.Net 및 PHP를 대상으로 하지만 후자의 경우 여전히 PHP 프레임워크에서도 활성화해야 합니다.
따라서 압축이 발생하지 않는 이유는 생성기 측(이 경우 Coldfusion)에서 활성화해야 하기 때문이라고 가정합니다.
답변4
applicationHost.config를 편집하려면 메모장을 사용하십시오.메모장++(및 Visual Studio 2010 편집기!!)에서 변경한 내용이 IIS에 적용되지 않는다는 사실을 이해하기까지 몇 시간을 낭비했습니다.
DynamicTypes/staticTypes 컬렉션에 추가 mimeType을 추가하는 다른 방법은 appcmd를 사용하는 것입니다."C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
그리고 다시 말씀드리지만, 이러한 변경 사항이 적용된 후에는 메모장에서만 해당 내용을 볼 수 있습니다. Notepad++(Visual Studio 2010 편집기도 포함)는 applicationHost.config에 대한 일종의 대체 현실/저장소를 유지 관리합니다. 파일을 메모장에서 편집하고 np++/VS에서 다시 연 후에도 파일의 자체 버전(메모장에서 보는 것과 다름)을 보여줍니다.