Заголовки не устанавливаются в Laravel 5.6

Я использую Ларавель 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, либо что-то в этом роде.

Буквально любое указание в правильном направлении приветствуется.


person Andrei    schedule 16.03.2018    source источник
comment
кроме шуток; относится ли это к вашему вопросу? laracasts.com/discuss/channels/laravel/ . Обратите внимание, что они используют метод add().   -  person waterloomatt    schedule 16.03.2018
comment
Согласен с @Vasyl, что веб-сервер должен обрабатывать кеш для активов. Кроме того, разве вы не должны устанавливать заголовок для ответа? laracasts.com/discuss/channels/ ларавель/   -  person waterloomatt    schedule 16.03.2018


Ответы (2)


  1. Laravel не обрабатывает запросы ресурсов. Эти запросы обрабатываются веб-сервером.
  2. Вот почему попробуйте включить модуль заголовков apache, выполнив команду a2enmod headers
person Vasyl Sovyak    schedule 16.03.2018

Первая проблема заключается в том, что вы используете заголовок запроса 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 по этому поводу

Включить кэширование статических ресурсов

Итак, теперь, если вы хотите установить время истечения срока действия ресурсов, чтобы их можно было кэшировать, лучший способ сделать это — использовать ваш веб-сервер. Например, если вы используете Apache, это руководство поможет. Кстати, вы должны использовать свой веб-сервер, потому что по большей части Laravel не отвечает на запросы статических ресурсов (ваш веб-сервер отвечает), если вы этого не укажете. Короче говоря, вам нужно включить модуль mod_expires и настроить его, установив время истечения срока действия.

a2enmod expires

и используйте его как ниже

[...]
<IfModule mod_expires.c>
      <FilesMatch "\.(jpe?g|png|gif|js|css)$">
                  ExpiresActive On
                  ExpiresDefault "access plus 1 week"
      </FilesMatch>
</IfModule>
[...]    
person Farzin Farzanehnia    schedule 16.03.2018