我正在使用Laravel 5.6。
我正在尝试缓存我的css / js文件。我这样做的方式是使用中间件。
let items = [1, 2, 3]
let sep = 0
let newItems = Array(items.map { [$0] }.joined(seperator: [sep]))
print(newItems) // [1, 0, 2, 0, 3]
基本上包装了这个中间件中的每个路径。从我站立的地方来看,这似乎是一个非常糟糕的想法,但是说实话,我找不到另一种方法(任何建议都是受欢迎的)。但那不是问题。
问题是我的标题没有通过。
我也尝试过.htaccess
设置标题 public function handle($request, \Closure $next, $guard = null)
{
$request->header('Cache-Control', 'max-age=86400, public');
$request->header('X-www-test-header', 'test-value');
return $next($request);
}
这也不起作用。
老实说,我不确定问题是什么。要么laravel以某种方式重写所有标题或apache或其他东西。
从字面上看,任何指向正确方向的人都会受到赞赏。
答案 0 :(得分:0)
a2enmod headers
答案 1 :(得分:0)
第一个问题是您使用请求标头getters
来设置标头,当然这不会起作用。因此$request->header(key, default)
将返回带有请求中指定键的标头,如果该标头不存在,则会返回您指定的默认值。
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
上面的代码显示了如何将标题附加到响应中,这里是Laravel documentation
现在,如果您想设置资产的过期时间以便缓存它们,最好的方法是利用您的Web服务器。例如,如果您使用的是Apache,this tutorial会有所帮助。 顺便说一句,您应该使用您的Web服务器,因为在大多数情况下,Laravel不响应静态资产请求(您的Web服务器确实如此),除非您指定。 简而言之,您需要启用mod_expires模块并将其配置为设置到期时间
a2enmod expires
并将其用作下面的
[...]
<IfModule mod_expires.c>
<FilesMatch "\.(jpe?g|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 week"
</FilesMatch>
</IfModule>
[...]