Я использую 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
Первая проблема — вы используете заголовок запроса 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>
[...]