Google chrome m'aura donné du fil à retordre...
Google chrome m'aura donné du fil à retordre...

Enfin ! La nouvelle interface pour commenter arrive sur Otakugame.fr !

Ah ah ! J’ai enfin réussi à régler le problème du chunked avec Google Chrome ! Il était bien du à la façon dont varnish gère le chunk… Etrange.

Donc en ajoutant ceci :

sub vcl_recv {

 

….

 

# — WordPress specific configuration

# Did not cache the admin and login pages
if (req.url ~ « wp-(login|admin) » || req.url ~ « preview=true ») {
return (pass);
}

#dont cache ajax requests
if(req.http.X-Requested-With == « XMLHttpRequest » || req.url ~ « nocache » || req.url ~ « (admin-ajax.php|control.php|wp-comments-post.php|wp-login.php|bb-login.php|bb-reset-password.php|register.php) »)
{
return (pass);
}

# Normalize Accept-Encoding header and compression
# https://www.varnish-cache.org/docs/3.0/tutorial/vary.html
if (req.http.Accept-Encoding) {
# Do no compress compressed files…
if (req.url ~ « \.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$ ») {
unset req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ « gzip ») {
set req.http.Accept-Encoding = « gzip »;
} elsif (req.http.Accept-Encoding ~ « deflate ») {
set req.http.Accept-Encoding = « deflate »;
} else {
unset req.http.Accept-Encoding;
}
}

 

….

 

}

dans notre fichier default.vcl (nano /etc/varnish/default.vcl), on arrive enfin à passer outre le bug de chrome « ERR_INCOMPLETE_CHUNKED_ENCODING » ! Chrome est vraiment trop stricte à ce niveau… En gros, il faut normaliser les entêtes Accept-Encoding et éviter de cacher ces requêtes. Et là… Magie, ça marche !

J’en ai profité pour faire d’autres optimisations… Sur les Cookies cette fois-ci !

sub vcl_recv {

….

# Remove the Quant Capital cookies (added by some plugin, all __qca)
set req.http.Cookie = regsuball(req.http.Cookie, « __qc.=[^;]+(; )? », «  »);

# Remove the wp-settings-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie, « wp-settings-1=[^;]+(; )? », «  »);

# Remove the wp-settings-time-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie, « wp-settings-time-1=[^;]+(; )? », «  »);

# Remove the wp test cookie
set req.http.Cookie = regsuball(req.http.Cookie, « wordpress_test_cookie=[^;]+(; )? », «  »);

# Are there cookies left with only spaces or that are empty?
if (req.http.cookie ~ « ^ *$ ») {
unset req.http.cookie;
}

# Check the cookies for wordpress-specific items
if (req.http.Cookie ~ « wordpress_ » || req.http.Cookie ~ « comment_ ») {
return (pass);
}
if (!req.http.cookie) {
unset req.http.cookie;
}

….

}

Enfin, il y a une erreur de programmation dans wordpress, qui ne renvoi pas le content-length sur les requêtes ajax en html. En m’inspirant de cet article, j’ai remplacé dans le fichier « wp-includes/class-wp-admin-ajax-response.php » cela :

public function send() {
header( ‘Content-Type: text/xml; charset=’ . get_option( ‘blog_charset’ ) );

echo « <?xml version=’1.0′ encoding=' » . get_option( ‘blog_charset’ ) . « ‘ standalone=’yes’?><wp_ajax> »;
foreach ( (array) $this->responses as $response )
echo $response;
echo ‘</wp_ajax>’;
if ( defined( ‘DOING_AJAX’ ) && DOING_AJAX )
wp_die();
else
die();
}

par

public function send() {
$xml = « <?xml version=’1.0′ encoding=' » . get_option(‘blog_charset’) . « ‘ standalone=’yes’?><wp_ajax> »;
foreach ( (array) $this->responses as $response )
$xml .= $response;
$xml .= ‘</wp_ajax>’;
$length = strlen($xml);
header(‘Content-Type: text/xml; charset=’ . get_option(‘blog_charset’));
header(‘Content-Length: ‘.$length);
header(‘Date: ‘.date(DATE_RFC1123));
echo $xml;
if ( defined( ‘DOING_AJAX’ ) && DOING_AJAX )
wp_die();
else
die();
}

On termine dans apache par désactiver gzip avec « SetEnv no-gzip 1 » (je n’ai pas trouvé plus propre depuis qu’on utilise mod_deflate) dans l’admin (fichier httpd.conf)

<Directory « /votre/url/vers/votresite.fr/wp-admin »>
SetEnv no-gzip 1
</Directory>

Et voilà ! Plus d’erreur pour Chrome, qui a enfin la longueur exacte de sa requête (pfiouuu) ! Avec tout cela, je devrais pouvoir vous mettre rapidement en place la nouvelle interface pour les commentaires notamment ! J’étais bloqué par rapport aux utilisateurs de chrome… See you soon 😉 !