Как отключить chunked-кодировку для ответов JSON в Laravel?
Я возвращаю массив из метода контроллера в Laravel. Laravel интерпретирует это так, что я хочу отправить JSON, и это здорово, но это не устанавливает Content-Length
и вместо этого использует Transfer-Encoding: chunked
,
Мои ответы крошечные, поэтому я не хочу разбивать их на части. Как я могу отключить chunked encoding + включить Content-Length?
Я использую nginx для сервера, если уместно.
2 ответа
Единственное решение, которое сработало для меня в Laravel (5.8), состояло в том, чтобы добавить заголовок отключить
Content-Encoding
. Проблема в том, что Nginx (10) был настроен на сжатие вывода с помощью
gzip
который добавляет
Content-Encoding:gzip
,
Transfer-Encoding: chunked
и удаляет
Content-Length
заголовок. Но добавляя этот заголовок, Nginx обходит сжатие и не будет вносить эти изменения в заголовок.
$headers = [
"Content-Length" => strlen($responseJson),
"Content-Encoding" => "disabled",
];
Мое решение добавляет content-length
заголовки ответа, затем chunked-transfer
будет заменен
$responseJson = json_encode($response);
$headers = [
"Content-Length" => strlen($responseJson),
];
return response($responseJson, 200, $headers);
ты можешь попробовать это с почтальоном
для содержимого JSON просто добавьте тип содержимого в заголовки
$headers = [
"Content-Length" => strlen($responseJson),
"Content-Type" => "application/json",
];