IIS 7에서 압축을 위해 특정 MIME 유형을 모두 무시하는 이유는 무엇입니까? 오류 제공 : DYNAMIC_COMPRESSION_NOT_SUCCESS-이유 12


11

그래서 나는 약간의 IIS7 n00b이지만 3으로 돌아가는 대부분의 오래된 IIS 시스템을 사용했습니다. 동적 압축을 켜려고하는데 주로 작동합니다. 일괄 처리 여부에 관계없이 ADO.Net Data Service (Astoria) 요청에는 작동하지 않습니다.

실패한 요청 (FREB) 추적 이 실제로 도움이 된다는 것을 알았 습니다 . 배치되지 않은 요청에서 볼 수있는 것은 Reason Code 12, NO_MATCHING_CONTENT_TYPE입니다. 좋아, 일치하는 MIME 유형을 지정하지 않았으므로 쉽습니다.

이것이 내 web.config에있는 것을 제외하고는 정확하지만 어쩌면 그렇지 않을 수도 있습니다.

<httpCompression dynamicCompressionDisableCpuUsage="100"
                 dynamicCompressionEnableCpuUsage="100"
                 noCompressionForHttp10="false"
                 noCompressionForProxies="false"
                 noCompressionForRange="false"
                 sendCacheHeaders="true"
                 staticCompressionDisableCpuUsage="100"
                 staticCompressionEnableCpuUsage="100">
    <dynamicTypes>
        <clear/>
        <add mimeType="*/*"
             enabled="true" />
    </dynamicTypes>
    <staticTypes>
        <clear/>
        <add mimeType="*/*"
             enabled="true" />
    </staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
                doStaticCompression="true"
                dynamicCompressionBeforeCache="false" />

이제 이것은 Accept : Gzip 헤더를 포함하는 모든 요청을 압축해야 함을 의미한다고 생각합니다. 다른 사람들이 여기서 어떻게 생각하는지 알고 싶습니다.

피들러 흔적 :

GET /SecurityDataService.svc/GetCurrentAccount HTTP/1.1
Accept-Charset: UTF-8
Accept-Language: en-us
dataserviceversion: 1.0;Silverlight
Accept: application/atom+xml,application/xml
maxdataserviceversion: 1.0;Silverlight
Referer: http://sdev03/apptestpage.aspx
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
Host: sdev03
Connection: Keep-Alive
Cookie: .ASPXAUTH=<snip>


HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/atom+xml;charset=utf-8
Server: Microsoft-IIS/7.0
DataServiceVersion: 1.0;
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 22 Mar 2010 22:29:06 GMT
Content-Length: 2726

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
*** <snip> removed ***

1
메모장을 사용하여 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그리고 다시 :이 변경 후-메모장에서만 볼 수 있습니다. 메모장 ++ (Visual Studio 2010 편집기뿐만 아니라 !!)
Sasha

Alexander, 100 % 확신 할 수는 없지만 여기서 말하는 내용을 이해하지만 텍스트 편집기로 IIS 구성을 수정하면 제대로 작동한다고 말할 수 있습니다. BOM 마커를 추가하는 편집기에는 문제가있을 수 있지만 그 외에는 문제가 없습니다. 필자의 경우 메모장을 사용하여 편집 할 수 없었고 잘못된 파일을 편집 한 것이 아닙니다. 응용 프로그램 웹 루트에있는 web.config에서 모든 구성을 변경할 수있는 것은 아닙니다. 일부는 System 폴더의 appHost에 대해 작성해야합니다.
피터 Oehlert

6
@alexander : 64 비트 윈도우에서 notepad ++ 또는 Visual Studio와 같은 32 비트 응용 프로그램을 사용하면 WOW64가 System32 폴더의 파일 리디렉션을 트리거하게됩니다. 편집하면 32 비트 프로그램에서만 볼 수있는 C : \ WINDOWS \ SysWOW64에 복제본이 만들어지며 64 비트 프로그램 인 IIS에서는 사용되지 않습니다.
Fredrik Haglund

메모장이 실제로 작동합니다. 메모장 ++과 Visual Studio가 리디렉션됩니다.
브라이언 화이트

@FredrikHaglund 성배. 나는 그 설명을 자체 설명에 약간의 설명과 함께 넣을 것을 제안 할 것입니다 ... 나는 그런 일이 진행되고 있다는 것을 전혀 몰랐으며, 당신의 의견을 보지 못하면 더 많은 시간 동안 내 꼬리를 쫓아 갔을 것입니다. (이 문제를 언급 한 Sasha와 Brian White에게도 도움이되지만 귀하의 의견은 문제의 핵심에 가장 근접한 것 같습니다.)
Beska

답변:


7

좋아, web.config에서 이것을 구성 할 수 없으며 appHost.config에서만 구성 할 수 있습니다. 문서가 appHost.config라고 말했지만 가정 할 수있는 유일한 구성 위치가 아니라 일반적인 개념의 사양이라고 가정했습니다.


옳은. system.webServer 구성은 웹 사이트 레벨에서 httpCompression을 허용하지 않습니다. 루트 (예 : applicationhost.config)에서 동일하게 구성 할 수 있습니다.
Vivek Kumbhar 23.40에

흠 .. docs web.config 수준에서 적용 할 수 있다고 말하십시오. 맨 아래로 스크롤 하십시오 . msdn.microsoft.com/en-us/library/ms690689(v=vs.90).aspx "구성 위치" 표 .. ​​문서에 문제가 있습니까?
avs099

@ avs099 몰라요. 이 3 년 전에 게시했을 때 web.config로 시작하고 작동하지 않는 b / c를 게시했다고 확신합니다. 패치에서 기능이 변경되었거나 문서가 잘못되었을 수 있습니다. 확인하기 위해 테스트하는 것이 좋습니다.
Peter Oehlert

1
아,-명확하지 않을 수도 있습니다-설명서를 읽는 방식에 따르면 httpCompression은 web.config에서 사용할 수 있다고 말합니다.하지만 작동시킬 수 없어서 applicationHost.config 파일도 수정했습니다. 나에게 문서처럼 보이는 것은 오도의 소지가 있습니다. 그래서 여기에 내 대답 연결됩니다 : stackoverflow.com/a/20552186/1246870
avs099

내 대답 참조-기본적으로 IIS를 새로 설치 web.config하면 압축 설정 재정의 가 해제 되므로을 수정해야합니다 applicationHost.config. 압축 설정을 변경하는 대신 재정의를 허용하면 업무를 다시 시작할 수 있습니다.
mcw

3

피터, 힌트 주셔서 감사합니다-우리는 또한 그 설정을 발견

<add mimeType="application/atom+xml; charset=utf-8" enabled="true" />

<httpCompression>부분을 applicationHost.config수정했습니다.

압축 코드의 버그로 인해 인코딩지정해야했습니다 .

압축 코드에는 응답 헤더의 문자 세트를 올바르게 구문 분석하지 않는 버그가 있으므로 동적 압축 설정에서 "application / xml; charset = utf-8"을 구성해야 작동합니다.

관련 섹션은 다음과 같습니다.

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml; charset=utf-8" 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>

3

새로 설치하면 내 applicationHost.config(in %windir%\system32\inetsrv\config)의 설정이 다음과 같습니다.

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

... 불행히도 압축을위한 기본 MIME 유형 세트는 압축 압축 후보가 될 JSON 및 기타 데이터 유형을 포함하지 않습니다.

그것을 다음으로 전환 :

<section name="httpCompression" overrideModeDefault="Allow" />

my 의 httpCompression태그 아래에서 system.webServer태그를 구성 할 수 있습니다 web.config.

httpCompression섹션을 설정하여 이것을 확인했습니다 applicationHost.config.

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

... 이제 실제로 압축하려는 모든 MIME 유형을 설정할 수 있습니다 web.config.


실패한 요청 추적은이 문제를 해결하는 데 매우 도움이되었습니다. iis.net/learn/troubleshoot/using-failed-request-tracing/…
mcw

IIS8 +에서는 전혀 작동하지 않습니다. 최신 버전의 IIS httpCompression에서 요소를 작동시키는 경험이 web.config있습니까? 아니면 불가능합니까? 문서는 악몽입니다. ​​거래가 공식적으로 어디에 있는지 말하지 않는 것 같습니다.
theyetiman 2012

@ theyetiman-죄송합니다. IIS8 +를 전혀 사용하지 않았습니다. 행운을 빕니다.
mcw

0

powershell에서 누락 된 MIME 유형을 추가하려면 다음 명령을 사용하십시오.

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='application/javascript'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='image/svg+xml'; enabled='True'}

Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -AtIndex 0 -Value @{mimeType='text/css'; enabled='True'}

IIS가 첫 번째 일치하는 것처럼 보이기 때문에 mimeType의 순서가 중요합니다. 즉, 와일드 카드 (*)가있는 mimeType은 와일드 카드가없는 mimeType 아래에 있어야합니다. 따라서 mimeType */*이 맨 아래에 있는지 확인하십시오. 아래의 항목은 사용되지 않습니다.

편집하다:

IIS는 짜증나므로 최선의 옵션은 staticType을 지우고 모든 것을 올바른 순서로 다시 추가하는 것입니다.

Clear-WebConfiguration -Filter "//system.webServer/httpCompression/staticTypes/add" -PSPath 'IIS:\'

SetCompressionOfMimeType 'text/*' 'True'
SetCompressionOfMimeType 'application/javascript' 'True'
SetCompressionOfMimeType 'image/svg+xml' 'True'
SetCompressionOfMimeType 'text/css' 'True'
SetCompressionOfMimeType '*/*' 'False'


function SetCompressionOfMimeType($mimeType, $enabled){
    Write-Output "Setting compression for $mimeType to $enabled"
    Add-WebConfiguration -Filter '/system.webServer/httpCompression/staticTypes' -PSPath 'IIS:\' -Value @{mimeType=$mimeType; enabled=$enabled}
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.