web-dev-qa-db-fra.com

Comment activer la compression gzip lors de l'utilisation de MVC3 sur IIS7?

Quelqu'un sait-il comment activer la compression gzip dans MVC 3? J'utilise IIS7.

Google Chrome Résultat de l'audit:

  1. Activer la compression gzip (4)
  2. Compresser les ressources suivantes avec gzip pourrait réduire la taille de leur transfert d'environ deux tiers (~ 92,23 Ko):
  3. / mydomain/pourrait économiser ~ 1,53 Ko
  4. jquery-1.4.4.min.js pourrait économiser ~ 51,35 Ko
  5. Cufon.js pourrait économiser ~ 11.89KB
  6. Futura.js pourrait économiser ~ 27.46Ko
97
imarkic84

Vous pouvez configurer la compression via votre web.config fichier comme suit:

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

Vous trouverez la documentation de cet élément de configuration à l’adresse iis.net/ConfigReference . C'est l'équivalent de:

  1. Ouverture d'Internet Information Services (Gestionnaire IIS)
  2. Navigation dans l'arborescence située à gauche jusqu'à atteindre le répertoire virtuel que vous souhaitez modifier
  3. Sélection du répertoire virtuel approprié de sorte que le titre du volet de droite devienne le nom dudit répertoire virtuel.
  4. Choisir "Compression" sous "IIS" dans le volet de droite
  5. Cochez les deux options et choisissez "Appliquer" sous "Actions" à l'extrême droite.

Remarque: (comme indiqué dans les commentaires) Vous devez vous assurer que la compression dynamique HTTP est installée, sinon, définissez doDynamicCompression="true" n'aura aucun effet. Le moyen le plus rapide de le faire est:

  1. Démarrer> Tapez optionalfeatures (c'est le moyen le plus rapide d'accéder à la fenêtre "Activer ou désactiver des fonctionnalités Windows")
  2. Accédez à Internet Information Services> Services World Wide Web> Fonctionnalités de performance dans l'arborescence "Fonctionnalités Windows"
  3. Assurez-vous que "Compression de contenu dynamique" est coché.
  4. Cliquez sur "Ok" et attendez que Windows installe le composant.
138
Rob

Vous pouvez le faire dans le code si vous préférez le faire. Je ferais un contrôleur de base dont chaque contrôle hériterait et le décorerais avec cet attribut ci-dessous.

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}
31
NetProvoke

La compression est activée/désactivée au niveau du serveur. Voir IIS de compression dans la console de gestion IIS).

Voici les instructions pour IIS du site Microsoft.

12
nakhli