У меня есть два маршрута:
$app->get('time1', function(){
return response('time1 = '.time());
});
$app->get('time2', function(){
return response()->json(['time2' => time()]);
});
И одна глобальная промежуточная программа:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->setEtag(md5($response->getContent()));
return $response;
}
В первом случае у меня есть этот HTTP-заголовок:
ETag:"8114ac3b0aad6e54345ee00f78959316"
Но не во втором. Зачем? Как добавить такой же заголовок во втором случае?
Причина, по которой вы видите нет ETag во втором ответе этот заголовок удален вашим веб-сервером из-за того, что возвращенный ответ сжатый сервером — см. Контент-кодировка: gzip заголовок. Причиной этого является то, что один и тот же ресурс не может быть байтовым идентичным, учитывая, что GZIP имеет различные уровни сжатия.
Вы можете отключить сжатие GZIP (проверьте ваш конфиг Apache, особенно конфиг модуля mod_deflate) или живите без ETag.
....
public function handle($request, Closure $next)
{
$response = $next($request);
if ($request->isMethod('GET'))
{
$etag = md5($response->getContent());
$requestETag = str_replace('"', '', $request->getETags());
if ($requestETag && $requestETag[0] == $etag)
{
// Modifies the response so that it conforms to the rules defined for a 304 status code.
$response->setNotModified();
}
$response->setETag($etag);
}
return $response;
}