繁体   English   中英

标头未在Laravel 5.6中设置

[英]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之类的东西。

从字面上看,任何指向正确方向的方法都值得赞赏。

  1. Laravel不处理资产请求。 这些请求由WEB服务器处理。
  2. 这就是为什么尝试通过执行命令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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM