我有一个网站,我增加了对所有网页/图片和脚本到期的信息,但是我不知道我怎么能添加过期头到外部脚本。
例如谷歌Analytics(分析) - 它有过期设置为1天头。
谷歌是不是我的问题,从外部网站其他一些脚本是真正的问题,他们没有过期头都没有。
我有一个网站,我增加了对所有网页/图片和脚本到期的信息,但是我不知道我怎么能添加过期头到外部脚本。
例如谷歌Analytics(分析) - 它有过期设置为1天头。
谷歌是不是我的问题,从外部网站其他一些脚本是真正的问题,他们没有过期头都没有。
您只能在响应添加标题字段到你自己去服务器请求。 如果请求进入到另一台服务器,说谷歌的服务器,比它的谷歌的服务器回答的请求。
所以,你的问题的唯一解决方案是托管自己的服务器上的外部资源。 但是,这只是如果资源是静态的可能,不要从请求变更为要求,不依赖于其他的事情。
唯一的办法是创建脚本,下载从外部网站的内容,然后添加所需的头。
<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?文件= foo.js,然后使用
$files = array('foo.js' => 'http://external/...');
if(isset($files[$_GET['file']]))
{
echo file_get_contents($files[$_GET['file']]);
}
file_get_contents()函数当然需要一定的带宽,因此它会被推荐给也缓存结果的。
那是不可能的。
不推荐(而不是总是可能):如果它的静态内容,一个脚本预取,并设置自己的头。
你可以动态加载使用PHP的外部网页,这样你就可以输出原始数据之前发送报头。 这不是一个理想的解决方案,但如果你真的有可能要使用它。
<?php
header('expire-header');
echo file_get_contents('http://www.extern.al/website/url');
你不能。
尝试发送电子邮件托管该文件的一个(或多个),并试图让他们到期报头适用于它。
不要失去你的头脑,这些页面的测试...的一些建议可能是有用的,他们中的一些你不能做任何事情。 做任何你可以用自己的文件做什么,不介意外部因素。
我做了一个版本的代码,使您可以指定不同的到期日期为每个脚本:
<?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
以下可能对您有用。
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"
您可以添加一个查询字符串参数来欺骗浏览器以为它请求不同的资源。 例如,如果您希望浏览器从未缓存CSS,你可以添加一个问号后跟一个随机数到URL的末尾。 这通常工作,但可以做出不托管的文件服务器的工作。 试试看。