2013-01-19 8 views
16

im su un webhost condiviso e ho solo accesso al file web.config per iis7.5. I file javascript e i file css sono compressi con gzip, quindi funziona, ma penso che funzioni di default perché la compressione statica è abilitata in iis7.5. tuttavia, non riesco a ottenere i file di font per ottenere un gzip, hanno le stesse dimensioni quando vengono inviati e le intestazioni di risposta non hanno codifica del contenuto: gzip. grazie per qualsiasi aiuto.non è in grado di ottenere iis7 su gzip font font face-face

Questo è il file web.config:

<configuration> 
<system.webServer> 
    <directoryBrowse enabled="false" /> 
<staticContent> 
    <mimeMap fileExtension=".otf" mimeType="font/opentype" /> 
</staticContent> 
<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="font/open-type" enabled="true" /> 
    <add mimeType="application/javascript" enabled="true" /> 
    <add mimeType="text/css" enabled="true" /> 
    <add mimeType="text/html" enabled="true" /> 
    <add mimeType="*/*" enabled="false" /> 
     </dynamicTypes> 
    <staticTypes> 
    <add mimeType="text/*" enabled="true" /> 
    <add mimeType="font/opentype" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/javascript" enabled="true" /> 
    <add mimeType="*/*" enabled="false" /> 
     </staticTypes> 
</httpCompression> 
    <urlCompression dynamicCompressionBeforeCache="true" doDynamicCompression="true" doStaticCompression="true" /> 
    <defaultDocument> 
     <files> 
      <clear /> 
      <add value="Default.htm" /> 
      <add value="Default.asp" /> 
      <add value="index.htm" /> 
      <add value="index.html" /> 
      <add value="iisstart.htm" /> 
      <add value="default.aspx" /> 
      <add value="index.php" /> 
     </files> 
    </defaultDocument> 

</system.webServer> 
</configuration> 

risposta

35

Per impostazione predefinita, IIS non include i tipi MIME nel modulo httpCompression. È necessario modificare il file application.config in: C: \ Windows \ System32 \ inetsrv \ config.

Questo file ha effetto su tutti i siti Web e deve essere aperto con un editor di testo a 64 bit in Windows a 64 bit. (Notepad2 64-bit, blocco note, non utilizzare Notepad ++)

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
     <staticTypes> 
      <add mimeType="text/*" enabled="true" /> 
      <add mimeType="message/*" enabled="true" /> 
      <add mimeType="application/x-javascript" enabled="true" /> 
      <add mimeType="application/atom+xml" enabled="true" /> 
      <add mimeType="application/xaml+xml" enabled="true" /> 
      <add mimeType="*/*" enabled="false" /> 

      <!-- HERE --> 
      <add mimeType="image/svg+xml" enabled="true" /> 
      <add mimeType="application/font-woff" enabled="true" /> 
      <add mimeType="application/x-font-ttf" enabled="true" /> 
      <add mimeType="application/octet-stream" enabled="true" /> 
      <!-- HERE --> 

     </staticTypes> 
     <dynamicTypes> 
      <add mimeType="text/*" enabled="true" /> 
      <add mimeType="message/*" enabled="true" /> 
      <add mimeType="application/x-javascript" enabled="true" /> 
      <add mimeType="*/*" enabled="false" /> 

      <!-- HERE --> 
      <add mimeType="image/svg+xml" enabled="true" /> 
      <add mimeType="application/font-woff" enabled="true" /> 
      <add mimeType="application/x-font-ttf" enabled="true" /> 
      <add mimeType="application/octet-stream" enabled="true" /> 
      <!-- HERE --> 

     </dynamicTypes> 
</httpCompression> 

Queste sono le mie impostazioni personali per comprimere SVG, WOFF, EOT e TTF file.

Quindi digitare semplicemente iisreset nella riga di comando per ricaricare la configurazione in IIS o riavviare il computer.

UPDATE

WOFF e woff2 file già compressi, quindi non c'è bisogno di fare questo. In effetti, il cliente perderà le prestazioni se si gzip quelli.

+2

Per interessi, perché è richiesto un editor a 64 bit? Non ho mai sentito parlare di questo requisito prima. –

+1

È spiegato qui: http://serverfault.com/a/315906/221920 –

+5

L'ho seguito e controllato più di una dozzina di volte. IIS si rifiuta ancora di servire i miei file .svg con gzip. L'unico modo in cui ho avuto successo è impostare il mimetype di .svgs su "text/xml" ma poi non vengono visualizzati correttamente in molti browser. – Zac

4

Il problema è che per difetto di IIS non include i tipi MIME per i font Web nell'elenco dei tipi MIME che possono essere compressi. I file Javascript e css sono inclusi ed è per questo che li vedi compressi.

Le impostazioni httpCompression probabilmente non vengono utilizzate, quelle sono bloccate per impostazione predefinita e non possono essere impostate in web.config. Date un'occhiata a questa pagina: http://support.microsoft.com/kb/969062. Nella sezione "Ulteriori informazioni" si legge "è possibile impostare i tipi MIME solo per il livello del server Web".

L'unico modo per farlo funzionare sul mio server locale era aggiungere i tipi di mime nella sezione httpCompression di applicationHost.config (questo richiede l'accesso di amministratore). Impostarli in web.config non ha avuto alcun effetto.

3

Se non è possibile accedere a applicationhosts.config in tutti gli ambienti, un approccio più pragmatico è semplicemente quello di implementare un httpmodule per gzipping dei file svg.

Vedi questo post per un esempio di codice: http://laubplusco.net/gzip-svg-files-asp-net/

6

La cosa importante da notare è che la modifica del applicationHost.config (in% windir% \ system32 \ inetsrv \ config) dalla seguente impostazione:

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

a:

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

permetterà la configurazione del tag httpCompression sotto il tag system.webServer nella vostra web.config.

+0

Questo non funziona. Devi effettivamente aggiungere la riga '' in 'applicationHost.config'. L'impostazione in 'web.config' non ha alcun effetto, anche se si modificano le impostazioni come suggerito in questa risposta. (Almeno su IIS 8.5, Win8.1) – theyetiman