[英]Headers don't get set in Laravel 5.6
我正在使用Laravel 5.6。
我正在尝试缓存我的css / js文件。 我这样做的方法是使用中间件。
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);
}
并在此中间件中基本上包装了所有路由。 从我所处的位置来看,这似乎是一个非常糟糕的主意,但老实说,我找不到其他方法(欢迎提出任何建议)。 但这不是问题。
问题是我的标题没有通过。
我也尝试过通过.htaccess设置标题
<IfModule mod_headers.c>
<filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
Header set Cache-Control "max-age=2678400, public"
</filesmatch>
<filesmatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, private, must-revalidate"
</filesmatch>
<filesmatch "\.(pdf)$">
Header set Cache-Control "max-age=86400, public"
</filesmatch>
<FilesMatch "\.(js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 weeks"
</FilesMatch>
那也不行。
老实说,我不确定是什么问题。 laravel要么以某种方式重写了所有头文件或apache之类的东西。
从字面上看,任何指向正确方向的方法都值得赞赏。
a2enmod headers
启用apache headers模块的原因 第一个问题是您使用的请求头getters
设定一个标题,它不会,当然工作。 因此$request->header(key, default)
将从$request->header(key, default)
返回具有指定键的标头,如果该标头不存在,则将返回您指定的默认值。
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
上面的代码显示了如何将标头附加到响应上,这是关于Laravel的文档
因此,现在,如果您要设置资产的过期时间以便可以对其进行缓存,则最好的方法是利用Web服务器。 例如,如果您使用的是Apache,那么本教程会有所帮助。 顺便说一句,您应该利用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>
[...]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.