gpt4 book ai didi

php - 无法在 Laravel 4 中设置缓存控制

转载 作者:可可西里 更新时间:2023-11-01 17:02:21 24 4
gpt4 key购买 nike

我在 Laravel 4 中编写了一个 Controller 来提供静态资源,例如带有一些应用程序级跟踪的图像文件。不过,我不希望人们不得不为每张图片不断地访问网络服务器,所以我试图设置一个 Cache-Control header 。我在这里束手无策,它只是没有工作,我无法弄清楚为什么。有人可以看看下面的内容并告诉我我做错了什么吗?

$headers = array(
'Content-Type' => 'image/png',
'Cache-Control' => 'public, max-age=300',
'Content-Length' => filesize($file),
'Expires' => date('D, d M Y H:i:s ', time() + 300).'GMT',
);
return Response::stream(function() use ($file) {
readfile($file); }, 200, $headers);

当我访问该文件时,它几乎完美运行。显示图像,当我进入并使用 Chrome 或 Firefox 检查元素时,我可以看到 Expires header 设置正确(当我更改它并强制重新加载时,它会适本地重置它)。但无论我尝试什么,Cache-Control header 总是设置为“no-cache, private”。我试过使用以下方法,但都无济于事:

$headers['Cache-Control'] = 'public, max-age=300'; // Original setting
$headers['cache-control'] = 'public, max-age=300'; // Case-sensitive?
$headers['Cache-Control'] = 'max-age=300';
$headers['Cache-Control'] = 'private, max-age=300';
$headers['Cache-Control'] = 'max-age=300, public';
$headers['Cache-Control'] = 'max-age=300, private';

但就像我说的,无论我将其设置为什么,它总是返回一个显示 Cache-Control: no-cache, private 的响应 header 。

我做错了什么?我怎样才能让我的图像和二进制文件通过这个 Controller 返回到缓存中? Laravel 4 是否出于某种原因在所有响应中对 Cache-Control header 进行了硬编码?

最佳答案

查看本期:https://github.com/symfony/symfony/issues/6530和这一行:https://github.com/symfony/symfony/blob/2.4/src/Symfony/Component/HttpFoundation/StreamedResponse.php#L87

它建议改用 BinaryFileResponse。像这样:

$response = new Symfony\Component\HttpFoundation\BinaryFileResponse($file);
$response->setContentDisposition('inline');
$response->setTtl(300);
return $response;

//Or with setting the headers manually
return new Symfony\Component\HttpFoundation\BinaryFileResponse($file, 200, $headers, true, 'inline');

现在您可以设置 Cache-Control header 。

或者使用 Response::download() 门面:

return Response::download($file)->setTtl(300)->setContentDisposition('inline');
return Response::download($file, null, $headers)->setContentDisposition('inline');

关于php - 无法在 Laravel 4 中设置缓存控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com