X-UA-Device sur Grazia.fr

Varnish : Comment détecter l’appareil derrière le user-agent ?

Face à la multitude de user-agent savoir quel est le type d’appareil qui se cache derrière peux sembler compliqué.

Etat des lieux

Tout d’abord  dresse toi même un état des lieux sur ton varnish avec l’aide de la commande varnishtop.

varnishtop -i RxHeader -C -I ^User-Agent

Il en ressort le top des user-agent actuellement en accès sur ton varnish classé dans l’ordre d’importance de leur population

list length 73
 
 6.67 RxHeader User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
 6.41 RxHeader User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
 6.35 RxHeader User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0
 6.25 RxHeader User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0
 4.84 RxHeader User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
 4.49 RxHeader User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53
 4.43 RxHeader User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)
 4.43 RxHeader User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
 4.35 RxHeader User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
 3.92 RxHeader User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10
 3.78 RxHeader User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; GT-N8010 Build/JZO54K) 
 3.37 RxHeader       User-Agent: Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53

J’ai un peu épuré la liste pour ne garder que ce qui est explicite dans notre cas. On peux constater que nous avons une foule de user-agent mais que tous reste explicite comme

Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X)

ou encore

User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; GT-N8010 Build/JZO54K)

et encore

Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53

On peux en conclure que avec des recherches d’expressions régulières basé sur des chaines de caractère comme iPhoneiPad ou Android  (chaine présent dans les exemples ci dessus) on peux obtenir une idée du type d’appareil et de leur nombre.

Devidedetect la solution varnish

Donc du code d’instruction varnish vcl utilisant des expressions régulière la chose est possible. Et c’est exactement que fournit detectdevice.vcl de  Lasse Karstensen qui travail pour varnish software

Vous l’incluez dans votre code de configuration vcl avant le bloc vcl_recv

# Include sub module for mobil device detection
# Set req.http.X-UA-Device;
# must be call un recv section
include "devicedetect.vcl";

Pour mieux l’utiliser dans le  bloc vcl_recv

 # CALL sub module for mobil device detection
 # Set req.http.X-UA-Device;
 call devicedetect;

Au final detectdevice.vcl  va ajouter un champ nommé X-UA-Device au header http de la requête avec l’information sur le type d’appareil derrière le user-agent

En voici la liste pour exemple :

X-UA-Device = "pc";
X-UA-Device = "bot";
X-UA-Device = "tablet-ipad";
X-UA-Device = "mobile-iphone";
X-UA-Device = "mobile-android";
X-UA-Device = "tablet-android";
X-UA-Device = "mobile-smartphone";
X-UA-Device = "tablet-android";
X-UA-Device = "tablet-rim";
X-UA-Device = "tablet-hp";
X-UA-Device = "tablet-kindle";
X-UA-Device = "mobile-firefoxos";
X-UA-Device = "mobile-smartphone"
X-UA-Device = "mobile-generic"

Ce champ est donc inclus dans la demande et est disponible tout du long de la chaîne de traitement de la requête http. Elle est également transmise au backend. L’application web peux donc analyser les champs du header http et décider du comportement à adopter en fonction.

Exploiter X-UA-Device :

C’est très bien que l’application reçoive l’information mais comment faire pour que moi je puisse la voir dans la réponse ? Pour le savoir plaçons le code suivant dans le bloc vcl_deliver.

  # Set resp.http.X-UA-Device from req.http.X-UA-Device
 # For debug mobil detection device 
 set resp.http.X-UA-Device = req.http.X-UA-Device;

Dans le hearder de la demande nous avons précédemment ajouté le champ X-UA-Device avec la variable req.http.X-UA-Device (req comme request) . Maintenant nous avons indiqué que resp.http.X-UA-Device (resp comme response) est égale à req.http.X-UA-Device. Nous allons donc trouver un champs X-UA-Device dans le header http des réponses au navigateur.

Consulter l’information

Avec curl c’est toujours simple

curl -I http://www.grazia.fr -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"
HTTP/1.1 200 OK
Server: Apache
X-Powered-By: eZ Publish
Expires: Fri, 29 Aug 2014 07:48:46 GMT
Last-Modified: Fri, 29 Aug 2014 07:38:46 GMT
Cache-Control: public, max-age=600
Pragma:
Served-by: www.grazia.fr
Content-language: fr-FR
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
X-Cacheable: YES
X-Served-By: gz_web3
Date: Fri, 29 Aug 2014 07:39:49 GMT
X-Varnish: 1573767385 1573766523
Age: 63
Connection: keep-alive
X-UA-Device: pc
X-Cache: HIT
Via: gz-proxy1

Ma commande curl forge un user-agent Chrome sur Windows

 curl -I http://www.grazia.fr -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"

En conséquence le champ X-UA-Device indique un Pc desktop

X-UA-Device: pc

Avec les outils de Chromium

X-UA-Device.Grazia

Varnishtop

Maintenant vous pouvez également utiliser varnishtop pour suivre les user-agent et leur détection.

varnishtop -i TxHeader -I ^X-UA-Device
list length 6
 
 105.19 TxHeader X-UA-Device: pc
 38.52 TxHeader X-UA-Device: mobile-grazia
 18.19 TxHeader X-UA-Device: bot
 6.63 TxHeader X-UA-Device: mobile-android
 2.30 TxHeader X-UA-Device: mobile-iphone
 0.74 TxHeader X-UA-Device: mobile-smartphone

 

Laisser un commentaire