Benötigen Sie Hilfe bei einigen IIS7 web.config-Komprimierungseinstellungen

9

Ich versuche, meine IIS7-Komprimierungseinstellungen in meiner Datei web.config zu konfigurieren. Ich versuche, HTTP 1.0-Anforderungen als gzip zu aktivieren.

MSDN hat hier alle Infos dazu .

Ist es möglich, diese Konfigurationsinformationen in der Datei web.config meiner eigenen Website zu haben? Oder muss ich es auf Anwendungsebene einstellen? Derzeit habe ich diesen Code in meiner web.config ...

<system.webServer>
    <urlCompression 
        doDynamicCompression="true" 
        dynamicCompressionBeforeCache="true" />
    <httpCompression 
        cacheControlHeader="max-age=86400" 
        noCompressionForHttp10="False" 
        noCompressionForProxies="False" 
        sendCacheHeaders="true" />

    ... other stuff snipped ...

</system.webServer>

Es funktioniert nicht :( HTTP 1.1-Anforderungen werden komprimiert, nur nicht 1.0.

Diese MSDN-Seite oben besagt, dass sie verwendet werden kann in:

  • Machine.config
  • ApplicationHost.config
  • Stammanwendung Web.config
  • Anwendung Web.config
  • Verzeichnis Web.config

Können wir diese Einstellungen also pro Website programmgesteuert in einer web.config-Datei festlegen? (Dies ist eine Application Web.config-Datei ...) Was habe ich falsch gemacht?

Prost :)

EDIT: Ich wurde gefragt, woher ich weiß, dass HTTP1.0 nicht komprimiert wird. Ich verwende die Regeln für die Ablaufverfolgung fehlgeschlagener Anforderungen, die Folgendes melden: -

DYNAMIC_COMPRESSION_START
DYNAMIC_COMPRESSION_NOT_SUCESS
    Reason: 3
    Reason: NO_COMPRESSION_10
DYNAMIC_COMPRESSION_END
Pure.Krome
quelle

Antworten:

3

Achten Sie genau darauf, dass die Einstellung IIS 7.x web.config von

noCompressionForProxies="false"

Wird auf der Ebene web.config nicht berücksichtigt. Es muss wie folgt in C: \ Windows \ System32 \ inetsrv \ config \ ApplicationHost.config festgelegt werden:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="False">

Stellen Sie sicher, dass Sie nach dem Ändern der Einstellung einen IIS-Reset durchführen.

Eine Anforderung wird von IIS als von einem Proxy stammend bestimmt, wenn die Webanforderung des Clients den HTTP-Header "Via" wie folgt enthält:

Via: 1.1 foo
evermeire
quelle
Sie können auch appcmdEinstellungen auf Anwendungsebene festlegen (was wahrscheinlich viel einfacher ist).
Pure.Krome
2

Nach einigem Nachforschen ist es auf Anwendungsebene standardmäßig "gesperrt". Als solches muss es "entsperrt" werden. Dies kann über die Befehlszeile oder über die (zusätzlichen Download-) iis7-Verwaltungstools erreicht werden.

z.B. appcmd set config -section:urlCompression /doDynamicCompression:true

Refrences:

Pure.Krome
quelle
1

Wie testen Sie, ob HTTP1.0-Anforderungen nicht komprimiert werden? Könnte es sein, dass der von Ihnen verwendete Client dem Server nicht mitteilt, dass er eine komprimierte Antwort akzeptieren kann?

Wenn Sie die vom Client gesendeten Header sehen können (vom Testclient selbst dargestellt, mit Firebug oder ähnlichem, wenn Sie in Firefox oder IEHTTPHeaders testen, wenn Sie in IE testen, oder indem Sie den Datenverkehr mit einem externen Tool abhören), sollten Sie dies tun so etwas sehen

Accept-Encoding: compress, gzip, deflate

irgendwo da drin. Wenn der Client den Server nicht darüber informiert, dass er eine komprimierte Antwort akzeptieren kann, sendet der Server keine, unabhängig davon, welche anderen Einstellungen Sie auf der Serverseite haben.

Ein weiteres Problem könnte sein, wenn Sie über einen Proxyserver testen, der sich als solcher identifiziert hat. In diesem Fall hat die Einstellung noCompressionForProxies möglicherweise Vorrang und blockiert die Möglichkeit einer komprimierten Antwort.

Beachten Sie, dass einige Clients und Proxys, die HTTP1.0-Anforderungen senden (normalerweise ältere Software), eine komprimierte Antwort nicht korrekt verarbeiten, wenn sie eine erhalten. Wenn Sie also die Komprimierung für Antworten auf HTTP1.0-Anforderungen aktivieren, stellen Sie sicher, dass Sie dies tun Testen Sie Ihre Site / Anwendung in der gesamten Client / Proxy-Software, die Besucher / Benutzer verwenden sollen. Dies ist weniger problematisch, wenn Sie garantieren können, dass Ihre Zielgruppe bestimmte Software verwendet (wenn die App beispielsweise nur für ein internes Unternehmensnetzwerk bestimmt ist). Andernfalls müssen viele Kombinationen getestet werden, weshalb die meisten Server die Komprimierung deaktivieren 1.0 Anfragen vollständig.

David Spillett
quelle
Ich teste , dass HTTP1.0 Anfragen werden nicht mit dem gescheiterten Antrag Tracing Regeln komprimiert zu werden , die Berichte zurück: - DYNAMIC_COMPRESSION_START DYNAMIC_COMPRESSION_NOT_SUCESS Grund: 3 Grund: NO_COMPRESSION_10 DYNAMIC_COMPRESSION_END
Pure.Krome