Как добавить заголовок ETag к ответу JSON в Laravel (Lumen)

У меня есть два маршрута:

$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"

Но не во втором. Зачем? Как добавить такой же заголовок во втором случае?

0

Решение

Причина, по которой вы видите нет ETag во втором ответе этот заголовок удален вашим веб-сервером из-за того, что возвращенный ответ сжатый сервером — см. Контент-кодировка: gzip заголовок. Причиной этого является то, что один и тот же ресурс не может быть байтовым идентичным, учитывая, что GZIP имеет различные уровни сжатия.

Вы можете отключить сжатие GZIP (проверьте ваш конфиг Apache, особенно конфиг модуля mod_deflate) или живите без ETag.

2

Другие решения

 ....

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;

}
0

По вопросам рекламы [email protected]