web-dev-qa-db-fra.com

Comment puis-je ajouter des en-têtes d'expiration pour les scripts qui ne sont pas sur mon serveur?

J'ai un site Web et j'ai ajouté les en-têtes d'expiration sur toutes les pages/images et les scripts, mais je ne sais pas comment je pourrais ajouter des en-têtes d'expiration aux scripts externes.

Par exemple, Google Analytics - les en-têtes d'expiration sont définis sur 1 jour.

Google n’est pas mon problème, certains autres scripts de sites Web externes sont le vrai problème, ils n’ont pas du tout d’en-têtes Expire.

19
DanTdr

Vous ne pouvez ajouter des champs d'en-tête que dans les réponses aux demandes adressées à votre propre serveur. Si la demande est transmise à un autre serveur, par exemple Google, le serveur de Google qui répond à la demande.

La seule solution à votre problème consiste donc à héberger ces ressources externes sur votre propre serveur. Mais cela n’est possible que si les ressources sont statiques, ne changent pas de requête en requête et ne dépendent pas d’autres choses.

20
Gumbo

Le seul moyen est de créer un script qui télécharge le contenu du site externe, puis ajoute les en-têtes nécessaires.

<script type="text/javascript" src="http://external.example.com/foo.js"></script>

À

<script type="text/javascript" src="external.php?url=http://external.example.com/foo.js"></script>

Et external.php est quelque chose comme

<?php
header("Expire-stuff: something");
echo file_get_contents($_GET['url']);

Bien sûr, cela a un trou de sécurité donc je vous recommande d’utiliser des chaînes d’identifiant comme external.php? File = foo.js puis d’utiliser 

$files = array('foo.js' => 'http://external/...');
if(isset($files[$_GET['file']]))
{
  echo file_get_contents($files[$_GET['file']]);
}

file_get_contents () prendra bien sûr une partie de votre bande passante, il serait donc recommandé de mettre en cache le résultat.

20
raspi

Ce n'est pas possible.

Non recommandé (et pas toujours possible): Si son contenu statique, extrayez-le avec un script et définissez vos propres en-têtes.

2
echox

Vous pouvez charger dynamiquement les pages externes à l'aide de PHP afin de pouvoir envoyer des en-têtes avant de générer les données d'origine. Ce n'est pas une solution idéale, mais si vous en avez vraiment besoin, vous voudrez peut-être l'utiliser.

<?php
header('expire-header');

echo file_get_contents('http://www.extern.al/website/url');
2
Joost

Tu ne peux pas.

Essayez d’envoyer un courrier électronique à ceux qui hébergent le fichier et essayez de leur demander d’appliquer les en-têtes expires.

0
Linus

Ne perdez pas la tête devant ces tests de pages ... certaines des recommandations peuvent être utiles et certaines d'entre elles ne peuvent rien faire. Faites ce que vous pouvez faire avec vos propres fichiers, ne vous occupez pas des fichiers externes.

0
Avni Yayin