Как отключить 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",
    ];
Другие вопросы по тегам