提问者:小点点

如何在Laravel中禁用JSON响应的分块编码?


我正在从Laravel中的控制器方法返回一个数组。Laravel将此解释为我想发送JSON,这很好,但它没有设置Content-Llong,而是使用Transtrans-Encode: chunked

我的响应很小,所以我不想将它们分块。如何禁用分块编码启用Content-Llong?

如果相关,我正在为服务器使用nginx。


共2个答案

匿名用户

在Laravel(5.8)中对我有效的唯一解决方案是添加一个标头,禁用Content-Encode。问题是Nginx(10)被配置为使用gzip压缩输出,它添加了Content-Encode: gzipTranstrans-Encode:chunked并删除Content-Llong标头。但是通过添加该标头,Nginx绕过了压缩,不会对标头进行这些更改。

$headers = [
        "Content-Length" => strlen($responseJson),
        "Content-Encoding" => "disabled",
    ];

匿名用户

我的解决方案是在响应中添加内容长度标头,然后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",
    ];