web-dev-qa-db-fra.com

Comment corriger l'erreur "Pas d'en-tête Etag trouvé"?

J'ai testé mon site web sur ready.mobi et ça se voit

ÉCHEC MAJEUR

Tous les actifs de page doivent utiliser les en-têtes Etag appropriés pour activer la mise en cache côté client et accélérer les chargements de page futurs.

No Etag header found.

page FixIt ne me donne rien d’aide - que puis-je faire pour résoudre ce problème? .htaccess?

ps. Mon site Web fonctionne sur un serveur virtuel externe avec Apache, il utilise le framework CodeIgniter PHP.

2
MarcinWolny

En PHP, vous pouvez utiliser la fonction d'en-tête pour spécifier un Etag personnalisé comme suit:

 $et="11111"; // any custom etag value
 header("ETag: \"".$et."\"",true);

Assurez-vous simplement que lorsque vous mettez à jour la page Web en question que la valeur etag est mise à jour. Si vous ne voulez pas faire de mise à jour manuelle d'etag, vous pouvez utiliser ce code à la place:

 $et=md5(time()); // 32-bit etag value calculated based on current time in seconds since year 1970.
 header("ETag: \"".$et."\"",true);

Puisque vous utilisez un framework, cherchez dans la source PHP d'autres fonctions header () et placez-y le code ci-dessus.

2
Mike

Tous les actifs de page doivent utiliser les en-têtes Etag appropriés.

Mon site web tourne sur un serveur virtuel externe avec Apache

Vous ne pouvez pas envoyer de façon réaliste les en-têtes ETag de votre ressources de page (c.-à-d. Ressources statiques: images, scripts, css) à l'aide de PHP, car cela impliquerait l'envoi de tous les demandes de ces ressources, sinon statiques, via PHP, ce qui ne fera que ralentir considérablement le processus et nécessitera beaucoup de ressources processeur, ce qui annule l'objectif de définition de ETags en premier lieu.

Heureusement, Apache a la capacité ETag pour les fichiers statiques intégrés. Il est activé par défaut dans Apache, mais les hôtes ont tendance à désactiver cette fonctionnalité. Il peut être activé/remplacé dans .htaccess à l’aide de la directive FileETag, à condition que votre hôte l’autorise à le faire avec la directive AccessOverride FileInfo dans la configuration du serveur.

Dans .htaccess (ou configuration du serveur):

# Set ETags based on the files i-node, last modified time and file size (default)
FileETag INode MTime Size

Notez que si la charge est équilibrée sur plusieurs serveurs, vous voudrez peut-être supprimer le mot clé INode, car cela varie d'un serveur à l'autre. Cela entraînerait sinon l'envoi de ETags différents lorsque le fichier n'a pas effectivement changé.

Cela devrait être suffisant pour définir l’en-tête ETag. Cependant, vous devez également vous assurer que vous ne bloquez pas la mise en cache en envoyant un en-tête Cache-Control: no-store (ou similaire) car le navigateur n'enverra pas l'en-tête If-None-Match correspondant avec la valeur ETag envoyée précédemment. dans la réponse. Les deux sont nécessaires. La validation ETag doit être utilisée conjointement avec la mise en cache du navigateur.

Référence:
http://httpd.Apache.org/docs/2.4/mod/core.html#fileetag

1
MrWhite