2009-03-27 9 views
0

J'ai un module HTTP qui compresse la requête HTTP.Module HTTP de compression pouvant échapper les scripts en ligne

public override void Write(byte[] buffer, int offset, int count) 
{ 
    byte[] data = new byte[count]; 
    Buffer.BlockCopy(buffer, offset, data, 0, count); 
    string html = System.Text.Encoding.Default.GetString(buffer); 

    Regex reg = new Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}"); 
    html = reg.Replace(html, string.Empty); 

    byte[] outdata = System.Text.Encoding.Default.GetBytes(html); 
    _sink.Write(outdata, 0, outdata.GetLength(0)); 
} 

Comment puis-je échapper tous les scripts en ligne? Voici mes scripts regex.

Regex reg = new Regex("<script[^>]*?>[\\w|\\t|\\r|\\W]*?</script>", (RegexOptions.Singleline | RegexOptions.IgnoreCase)); 

Répondre

0

Je doute vraiment que vous voulez être en utilisant Encoding.Default, qui est spécifique à votre système. En dehors de cela, pourquoi ne pas utiliser la façon plus standard de faire de la compression, à savoir gzip les données binaires au lieu de faire de la manipulation de texte? Je soupçonne que cela aura plus d'impact, et n'est pas aussi fragile en termes de rupture accidentelle du HTML. En outre, vous n'aurez plus besoin de vous soucier de l'encodage.

+0

J'ai déjà GZip en utilisant IIS. Merci – user81740

+0

Si vous êtes déjà gzipping, est-ce vraiment faire une différence significative? L'avez-vous mesuré, ainsi que le coup de performance qu'il prend pour effectuer le remplacement de l'encodage/décodage/regex? Et puis il y a le risque d'avoir un peu tort ... –

+0

Je suis d'accord avec votre commentaire. Cela n'améliore pas les performances, mais nous l'utilisons pour l'optimisation SEO. – user81740

Questions connexes