Как добавить заголовки истечения срока действия для сценариев, которых нет на моем сервере? - PullRequest
20 голосов
/ 17 сентября 2009

У меня есть веб-сайт, и я добавил заголовки expire на все страницы / изображения и сценарии, но я не знаю, как добавить заголовки expire во внешние сценарии.

Например, Google Analytics - заголовки истечения установлены на 1 день.

Google - не моя проблема, некоторые другие скрипты с внешних веб-сайтов - настоящая проблема, у них вообще нет заголовков с истекшим сроком действия.

Ответы [ 9 ]

21 голосов
/ 17 сентября 2009

Вы можете добавлять поля заголовков только в ответах на запросы, которые отправляются на ваш собственный сервер. Если запрос отправляется на другой сервер, скажем сервер Google, чем сервер Google, который отвечает на запрос.

Таким образом, единственное решение вашей проблемы - размещение этих внешних ресурсов на вашем собственном сервере. Но это возможно только в том случае, если эти ресурсы статичны, не меняются от запроса к запросу и не зависят от других вещей.

20 голосов
/ 17 сентября 2009

Единственный способ - создать скрипт, который загружает содержимое с внешнего сайта, а затем добавляет необходимые заголовки.

<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>

И external.php - это что-то вроде

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

Конечно, здесь есть дыра в безопасности, поэтому я рекомендую использовать строки идентификаторов, такие как external.php? File = foo.js, а затем использовать

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

file_get_contents (), конечно, займет часть вашей полосы пропускания, поэтому рекомендуется также кэшировать результат.

2 голосов
/ 17 сентября 2009

Вы можете динамически загружать внешние страницы, используя PHP, поэтому вы можете отправлять заголовки перед выводом исходных данных. Это не идеальное решение, но, если оно вам действительно нужно, вы можете использовать его.

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

echo file_get_contents('http://www.extern.al/website/url');
2 голосов
/ 17 сентября 2009

Это невозможно.

Не рекомендуется (и не всегда возможно): если он статический, предварительно извлеките его с помощью скрипта и установите собственные заголовки.

0 голосов
/ 27 октября 2018

Не теряйте ума для этих тестов страниц ... некоторые рекомендации могут быть полезны, а некоторые из них вы ничего не можете сделать Делайте со своими файлами все, что можете, не забывайте о внешних.

0 голосов
/ 26 августа 2017

Я сделал версию этого кода, которая позволяет указывать разные даты истечения срока действия для каждого сценария:

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

?>

Подробнее: https://www.catswhocode.com/blog/php-how-to-add-expire-headers-for-external-scripts

0 голосов
/ 07 июля 2016

Следующее может быть полезно для вас.

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"

0 голосов
/ 19 сентября 2009

Вы можете добавить параметр строки запроса, чтобы заставить браузер думать, что он запрашивает другой ресурс. Например, если вы хотите, чтобы браузер никогда не кэшировал CSS, вы можете добавить знак вопроса, за которым следует случайное число в конце URL. Обычно это работает, но может быть сделано, чтобы не работать на сервере, на котором размещен файл. Попробуйте и посмотрите.

0 голосов
/ 17 сентября 2009

Вы не можете.

Попробуйте отправить электронное письмо одному или нескольким хостам, на которых размещен файл, и попытаться заставить их применить к нему заголовки expires.

...