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-il a des en-têtes expirés mis à 1 jour.

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

18
demandé sur DanTdr 2009-09-17 17:55:43

8 réponses

vous ne pouvez ajouter des champs d'en-tête que dans les réponses aux requêtes qui vont sur votre propre serveur. Si la requête va à un autre serveur, disons le serveur de Google, que C'est le serveur de Google qui répond à la requête.

Donc la seule solution à votre problème d'hébergement des ressources extérieures sur votre propre serveur. Mais cela n'est possible que si ces ressources sont statiques, ne changent pas de demande en demande et ne dépendent pas d'autres choses.

19
répondu Gumbo 2009-09-17 14:03:26

la seule façon est de créer un script qui télécharge le contenu d'un site externe et ajoute ensuite 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 externe.php est quelque chose comme

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

bien sûr, cela a trou de sécurité, donc je vous recommande d'utiliser l'identificateur de chaînes de caractères comme à l'externe.le php?fichier=foo.js et ensuite à l'aide de

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

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

20
répondu raspi 2009-09-17 14:08:53

ce n'est pas possible.

déconseillé (et pas toujours possible): si son contenu statique, préfigurez-le avec un script et définissez vos propres en-têtes.

2
répondu echox 2009-09-17 14:05:36

Vous pouvez charger dynamiquement les pages externes en utilisant PHP, de sorte que vous pouvez envoyer des en-têtes avant d'envoyer les données originales. Ce n'est pas une solution idéale, mais si vous avez vraiment pour vous souhaiterez peut-être utiliser.

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

echo file_get_contents('http://www.extern.al/website/url');
2
répondu Joost 2009-09-17 14:06:09

Vous ne pouvez pas.

Essayez d'e-mailing de la celle(s) qui héberge le fichier et essayez de les faire appliquer expire en-têtes.

0
répondu Linus 2009-09-17 14:02:49

j'ai fait une version de ce code qui vous permet de spécifier différentes dates d'expiration pour chaque script:

<?php

$files = array(
    'ga.js' => 'https://ssl.google-analytics.com/ga.js',
    'bsa.js' => 'https://s3.buysellads.com/ac/bsa.js',
    'pro.js' => 'https://s3.buysellads.com/ac/pro.js'
);

if(isset($files[$_GET['file']])) {
    if ($files[$_GET['file']] == 'ga.js'){
        header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + ((60 * 60) * 48))); // 2 days for GA
    } else {
        header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // Default set to 1 hour
    }

    echo file_get_contents($files[$_GET['file']]);
}

?>

Plus d'info: https://www.catswhocode.com/blog/php-how-to-add-expire-headers-for-external-scripts

0
répondu CoderCat 2017-08-26 10:03:20

ce qui suit peut vous être utile.

ExpiresActive On

ExpiresDefault "access plus 1 seconds"

ExpiresByType image/x-icon "access plus 2692000 seconds"

ExpiresByType image/jpeg "access plus 2692000 seconds"

ExpiresByType image/png "access plus 2692000 seconds"

ExpiresByType image/gif "access plus 2692000 seconds"

ExpiresByType application/x-shockwave-flash "access plus 2692000 seconds"

ExpiresByType text/css "access plus 2692000 seconds"

ExpiresByType text/javascript "access plus 2692000 seconds"

ExpiresByType application/x-javascript "access plus 2692000 seconds"

ExpiresByType text/html "access plus 600 seconds"

ExpiresByType application/xhtml+xml "access plus 600 seconds"

-2
répondu Php Dev 2016-07-07 06:00:11

vous pouvez être en mesure d'ajouter un paramètre de chaîne de requête pour tromper le navigateur en pensant qu'il demande une ressource différente. Par exemple, si vous voulez que le navigateur ne cache jamais un CSS, vous pouvez ajouter un point d'interrogation suivi d'un nombre aléatoire à la fin de l'URL. Cela fonctionne généralement, mais peut être fait pour ne pas fonctionner par le serveur hébergeant le fichier. Essayez et vous verrez.

-9
répondu 2009-09-19 03:29:08