Bugs: Firefox, favicon y webs protegidas

Este artículo va sobre esos bugs puñeteros e imposibles que se diagnostican con facilicidad cuando tienes acceso a los recursos apropiados. En este caso, los logs del servidor web.

Este bug es simple de explicar: Si una web está protegida con usuario/clave, lo normal es que el favicon no funcione en Firefox. ¿Por qué?. Porque cuando Firefox solicita el favicon al servidor no envía las credenciales y el servidor web le denegará el acceso.

En el log del servidor web veía algo de este estilo:

IP - [15/Oct/2015:12:06:26 +0200] "GET /icons/favicon.png HTTP/1.1" 401 381 [...]

El código 401 indica acceso denegado.

La solución obvia es "desproteger" el favicon de forma selectiva. En Apache HTTP Server sería algo de este estilo:

 [jcea@babylon5 conf]$ hg log -r -1 -p
 changeset:   70:492a4c65e69c
 tag:         tip
 user:        Jesus Cea <jcea@jcea.es>
 date:        Fri Oct 16 01:41:02 2015 +0200
 summary:     Desprotegemos el favicon para que Firefox tenga acceso a él

 diff --git a/conf/httpd.conf b/conf/httpd.conf
 --- a/conf/httpd.conf
 +++ b/conf/httpd.conf
 @@ -1497,7 +1497,11 @@
      AuthType Digest
      AuthName "HS P2P"
      AuthUserFile /home/hispashare/users
 -    Require valid-user
 +    <RequireAny>
 +      Require expr "%{REQUEST_URI} == '/icons/favicon.png'"
 +      Require expr "%{REQUEST_URI} == '/favicon.ico'"
 +      Require valid-user
 +    </RequireAny>
  </Directory>
  </VirtualHost>

La versión original requería un usuario autenticado válido.

La segunda versión admite el acceso si tenemos un usuario autenticado válido o si estamos accediendo al favicon. Es decir, no se pide autenticación para acceder al favicon.

En el log ahora sale lo que tiene que salir y Firefox muestra el favicon correctamente en la pestaña del navegador:

IP - [16/Oct/2015:01:23:50 +0200] "GET /icons/favicon.png HTTP/1.1" 200 1319 [..]

El código 200 indica que todo ha ido bien.

La parte más complicada de todo esto, una vez diagnosticado el problema, fueron las pruebas. Hay que lidiar con el cacheo que hace Firefox y el hecho de que guarda los favicons en muchos sitios diferentes. Tema de otro artículo... :-).