我有一个网站,我在所有页面/图像和脚本上添加了过期标题,但我不知道如何将expire标题添加到外部脚本。
例如Google Analytics(分析) - 它将过期标头设置为1天。
Google不是我的问题,来自外部网站的其他一些脚本是真正的问题,它们根本没有过期标题。
答案 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的末尾添加一个问号,后跟一个随机数。这通常有效但可以通过托管文件的服务器无法工作。试试吧,看看。