2009-09-17 8 views
18

Tengo un sitio web y agregué los encabezados caducados en todas las páginas/imágenes y guiones, pero no sé cómo podría agregar encabezados caducados a los guiones externos.¿Cómo puedo agregar encabezados caducados para las secuencias de comandos que no están en mi servidor?

Por ejemplo, Google Analytics: tiene encabezados de caducidad configurados en 1 día.

Google es mi problema, algunos otros guiones de sitios web externos son el problema real, no tienen encabezados caducados en absoluto.

Respuesta

19

Solo puede agregar campos de encabezado en las respuestas a las solicitudes que vayan a su propio servidor. Si la solicitud va a otro servidor, digamos el servidor de Google, que el servidor de Google que responde la solicitud.

Así que la única solución a su problema es alojar esos recursos externos en su propio servidor. Pero eso solo es posible si los recursos son estáticos, no cambian de solicitud a solicitud y no dependen de otras cosas.

0

No puede.

Pruebe a enviar por correo electrónico el que aloja el archivo y trate de que le apliquen los encabezados caducados.

2

Eso no es posible.

No recomendado (y no siempre posible): Si su contenido estático, precompórelo con un script y configure sus propios encabezados.

2

Puede cargar dinámicamente las páginas externas mediante PHP, para poder enviar encabezados antes de generar los datos originales. Esta no es una solución ideal, pero si realmente la necesita, puede querer usarla.

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

echo file_get_contents('http://www.extern.al/website/url'); 
+0

Esta voluntad no funciona para todos los scripts externos, lo he intentado para un sitio magento, pero no funciona correctamente. – prajosh

19

La única forma es crear un script que descargue los contenidos del sitio externo y luego agregue los encabezados necesarios.

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

Para

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

Y external.php es algo así como

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

Por supuesto, esto tiene agujero de seguridad, así que recomiendo utilizar cadenas de identificador como external.php? Archivo = foo.js y luego usando

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

file_get_contents(), por supuesto, tomará parte de su ancho de banda, por lo que se recomienda también almacenar en caché el resultado.

+0

¡Interesante! ¿Tiene esto alguna implicancia de velocidad? – v3nt

-9

Puede agregar un parámetro de cadena de consulta para engañar al navegador y hacerle pensar que está solicitando un recurso diferente. Por ejemplo, si desea que el navegador nunca guarde en caché un CSS, puede agregar un signo de interrogación seguido de un número al azar al final de la URL. Esto generalmente funciona pero el servidor que aloja el archivo no puede hacerlo. Pruébalo y mira.

+0

necesita seguir estándares en lugar de trucos baratos. –

0

Lo siguiente puede ser útil para usted.

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" 

+1

No. Solo puede agregar esto para su propio archivo js. No puede agregar esto para el archivo js externo. –

0

he hecho una versión de ese código que permiten especificar diferentes expirarán las fechas para cada uno de los scripts:

<?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']]); 
} 

?> 

Más información: https://www.catswhocode.com/blog/php-how-to-add-expire-headers-for-external-scripts

Cuestiones relacionadas