如何为不在我的服务器上的脚本添加过期标头?

时间:2009-09-17 13:55:43

标签: http header http-headers

我有一个网站,我在所有页面/图像和脚本上添加了过期标题,但我不知道如何将expire标题添加到外部脚本。

例如Google Analytics(分析) - 它将过期标头设置为1天。

Google不是我的问题,来自外部网站的其他一些脚本是真正的问题,它们根本没有过期标题。

9 个答案:

答案 0 :(得分:21)

您只能在对发送到您自己的服务器的请求的响应中添加标头字段。如果请求转到另一台服务器,比如Google的服务器,那么它的Google服务器会回复请求。

因此,解决您问题的唯一方法是在您自己的服务器上托管外部资源。但是,只有当资源是静态的时,才有可能,不要求从请求改变到请求,也不要依赖其他东西。

答案 1 :(得分:20)

唯一的方法是创建从外部网站下载内容然后添加所需标题的脚本。

<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 :(得分:2)

这不可能。

不推荐(并非总是可行):如果是静态内容,请使用脚本预取并设置自己的标题。

答案 3 :(得分:2)

您可以使用PHP动态加载外部页面,这样您就可以在输出原始数据之前发送标题。这不是一个理想的解决方案,但如果你真的需要,你可能想要使用它。

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

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

答案 4 :(得分:0)

你不能。

尝试通过电子邮件发送托管该文件的人,并尝试让他们将expires-headers应用于该文件。

答案 5 :(得分:0)

请不要为这些页面测试而着迷...有些建议可能有用,而有些建议您却无能为力。对您自己的文件做任何事,不要在意外部文件。

答案 6 :(得分:-1)

我已经制作了该代码的一个版本,允许您为每个脚本指定不同的过期日期:

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

答案 7 :(得分:-2)

以下内容可能对您有用。

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"

答案 8 :(得分:-9)

您可以添加查询字符串参数,以欺骗浏览器,使其认为它正在请求其他资源。例如,如果您希望浏览器永远不会缓存CSS,则可以在URL的末尾添加一个问号,后跟一个随机数。这通常有效但可以通过托管文件的服务器无法工作。试试吧,看看。