2016-07-07 38 views
7

Nel Firebug l'intestazione della richiesta ha la seguente voce:
Accept-Encoding: gzip, sgonfiareapplicazione IIS manca Content-Encoding - gzip nell'intestazione di risposta

Ma non c'è:
Content-Encoding: gzip
Nell'intestazione di risposta.

Indipendentemente da qualsiasi cosa che ho provato, in seguito a un numero di risposte su SO e altri siti, niente sembra funzionare! Né i file statici né quelli dinamici vengono compressi, o almeno se non ci sono codifiche del contenuto: il valore gzip ritorna nell'intestazione della risposta.

Ecco un esempio di mie impostazioni web.config:

<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true" /> 
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="150" staticCompressionIgnoreHitFrequency="true"> 
    <remove name="gzip" /> 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="8" dynamicCompressionLevel="8" /> 
</httpCompression> 

ho ignorato la frequenza colpo
staticCompressionIgnoreHitFrequency="true "

ho confermato che IIS è infatti la compressione dei file che ho può vedere in:
C: \ inetpub \ temp \ IIS Temporary Compressed Files

Come sp ecified qui: set up gzip in IIS 8 windows 8
ho assicurato che la compressione statica e dinamica è attivato nelle caratteristiche di Windows> Internet Information Services> WWW Servizi> Performance Caratteristiche

Ho anche provato l'approccio di questo tipo:
IIS 7.5 Compression creates compressed file but returns the non-compressed one


Edit 1:
versione di IIS è 10, ma ho anche provato questo su IIS 8.5


Edit 2:
ora ho anche provato vari file di configurazione si trovano a questo link: https://github.com/h5bp/server-configs-iis/ che fornisce quella che appare come alcune 'best practice' file web.config.
Non risolto


Edit 3:
Sulla base @ ingresso di Nkosi ho creato una nuova applicazione Asp.net MVC e configurato utilizzando tutte queste opzioni che ho provato. Ecco l'intestazione grezza che ho ricevuto da Fiddler:

HTTP/1.1 200 OK 
Transfer-Encoding: chunked 
Content-Type: text/javascript; charset=UTF-8 
Expires: Wed, 20 Jul 2016 18:22:47 GMT 
Last-Modified: Wed, 20 Jul 2016 18:22:47 GMT 
Server: Microsoft-HTTPAPI/2.0 
Date: Wed, 20 Jul 2016 18:22:47 GMT 

Come si può vedere, non Content-Encoding: Gzip
Non risolto


Edit 4:
I Ho provato questo approccio aggiungendo il codice all'evento BeginRequest nella sezione Global.asax: https://stackoverflow.com/a/27185575/392591
Non risolto


Edit 5:
Così ho appena provato che permette il tracciamento sulla base di questa risposta su SO: https://stackoverflow.com/a/33182525/392591
Nessun guasto, ma ho notato proprio in fondo del file di traccia c'è una sezione chiamata GENERAL_RESPONSE_HEADERS ed ecco che cosa prevede:

Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Server: Microsoft-IIS/10.0 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
X-Powered-By: My Little Pony 
X-UA-Compatible: IE=Edge,chrome=1 

e questo è per ogni file di tipo statico.
Comunque ho appena trovato la seguente nel file di traccia:

8. STATIC_COMPRESSION_START 08:04:03.552 
9. STATIC_COMPRESSION_NOT_SUCCESS Reason="NOT_FREQUENTLY_HIT" 08:04:03.552 
10. STATIC_COMPRESSION_END 08:04:03.552 

La compressione non Successo per la ragione non ha colpito frequenti ... Strano perché ho sicuramente l'opzione Ignora frequenza Hit impostata su true!

Così ho appena andato in IIS Manager e sul server ho impostare la frequenza Hit Ignora per vera (cioè applicationHost.config) ed è cambiato l'output file di traccia al seguente:

8. STATIC_COMPRESSION_START 08:19:17.489 
9. STATIC_COMPRESSION_SUCCESS 08:19:17.489 
10. STATIC_COMPRESSION_END 08:19:17.489 

sono tornato e lo ha spento nell'applicazione Host.config e è tornato a una Static Compression Not Success, quindi questo sicuramente fa la differenza. Tuttavia, quando guardo FireBug, è ancora in consegna il file non compresso e nessuna intestazione di risposta Codifica contenuti GZIP.

Un altro bit interessante che ho notato nella Traccia richiesta non riuscita sono gli ultimi due GENERAL_FLUSH_RESPONSE_END e GENERAL_REQUEST_END entrambi i quali mostrano il mio file Bootstrap.css che ha inviato 17903 byte, approssimativamente 18kb, corrispondente alla versione compressa del file che vedo in la mia cartella File temporanei compressi di IIS. Quindi il file viene fisicamente compresso e in base alle tracce di Failed Request sta inviando il contenuto giusto ... ma il browser preleva invece il file completo da 117 kb?
Non risolto


+0

Sto usando IIS10 e il mio web.config ha '' solo. Quando eseguo il test delle richieste da un browser (Firefox, IE11, Edge, Google Chrome) a una semplice applicazione MVC. Tutte le richieste hanno 'Accept-Encoding: gzip, deflate' e le risposte restituiscono' Content-Encoding: gzip' – Nkosi

+0

Vedere [this] (http://stackoverflow.com/questions/702124/enable-iis7-gzip). Forse hai bisogno di abilitare la funzione gzip sul server. –

+0

@LucasSegers - La funzionalità è definitivamente abilitata. – Jacques

risposta

1

Sto usando IIS10 e il mio web.config ha

<system.webServer> 
    <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" /> 
    <!-- other config removed for brevity --> 
</system.webServer> 

Quando faccio le richieste di prova da un browser (Firefox, IE11, Riva, Google Chrome) ad un semplice applicazione MVC.

Le richieste hanno tutte Accept-Encoding: gzip, deflate e le risposte restituiscono Content-Encoding:gzip.

L'ho persino provato con Fiddler.Comporre la richiesta manualmente

GET http://localhost/MyWebApplication HTTP/1.1 
User-Agent: Fiddler 
Host: localhost 
Accept-Encoding: gzip, deflate 

e ottenere lo stesso risultato

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/10.0 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 18 Jul 2016 15:26:06 GMT 
Content-Length: 3826 

... 

Css, Js e tutti gli altri file di testo base vengono compressi.

Potrebbe essere necessario ricontrollare la configurazione per assicurarsi di avere la compressione correttamente configurata in IIS e in web.config.

UPDATE:

Ho notato che le immagini non venivano compressi

Richiesta

GET http://localhost/MyWebApplication/Images/Logo_small.png HTTP/1.1 
User-Agent: Fiddler 
Host: localhost 
Accept-Encoding: gzip, deflate 

risposta

HTTP/1.1 200 OK 
Cache-Control: max-age=604800 
Content-Type: image/png 
Last-Modified: Fri, 27 Nov 2015 03:15:22 GMT 
Accept-Ranges: bytes 
ETag: "c9d1fdd9c128d11:0" 
Server: Microsoft-IIS/10.0 
X-Powered-By: ASP.NET 
Date: Mon, 18 Jul 2016 15:33:02 GMT 
Content-Length: 2970 

... 

E dopo un po 'di google-fu scoperto che le immagini di solito sono già compressi, quindi gzip non è stato applicato.

PIENA system.webServer da web.config

<system.webServer> 
    <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" /> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <clear /> 
     <error statusCode="404" responseMode="ExecuteURL" path="/NotFound" /> 
    </httpErrors> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    <staticContent> 
     <remove fileExtension=".woff" /> 
     <remove fileExtension=".woff2" /> 
     <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> 
     <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" /> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
    </staticContent> 
    </system.webServer> 
+0

Ho aggiornato la mia domanda, vedere Modifica 3. Quale codice hai rimosso dal tuo esempio, tutto ciò che potrebbe cambiare i miei risultati? – Jacques

+0

@Jacques, il resto della configurazione è 'httpErrors, handler, staticContent'. L'ho tenuto minimo. Lo includerò in un aggiornamento. – Nkosi

+0

ok, non penso che questo possa avere un impatto sul problema. Ho aggiunto un altro aggiornamento con un'altra soluzione che ho appena provato, ancora senza gioia. – Jacques

0

Ho avuto un problema simile con un pre configurato IIS.

Dopo molti tentativi, abbiamo capito che il problema era un bug nell'installazione di GZIP, il problema è stato risolto semplicemente reinstallando la funzionalità nel pannello di controllo.

Problemi correlati