在Laravel 5.6中没有设置标题

时间:2018-03-16 15:32:27

标签: php laravel apache2 laravel-5.6

我正在使用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]

基本上包装了这个中间件中的每个路径。从我站立的地方来看,这似乎是一个非常糟糕的想法,但是说实话,我找不到另一种方法(任何建议都是受欢迎的)。但那不是问题。

问题是我的标题没有通过。

enter image description here

我也尝试过.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或其他东西。

从字面上看,任何指向正确方向的人都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

  1. Laravel不处理资产请求。这些请求由WEB服务器处理。
  2. 这就是为什么尝试通过执行命令a2enmod headers
  3. 来启用apache头模块的原因

答案 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>
[...]