Apache 在测试时没有 return Laravel json 验证错误,但在 Dev 上有效

Apache not return Laravel json validation errors on Test but works on Dev

我一直致力于 Laravel API 验证。我正在向服务器发送此请求:

> POST /api/v1/clients HTTP/1.1
> Host: localhost
> User-Agent: insomnia/2022.3.0
> Content-Type: application/json
> Accept: application/json
> Authorization: Bearer ***************
> Content-Length: 16

{
 "name": "",
}

在我的开发系统 运行 windows/Apache/PHP 8.1 中,POST 请求 return 包含验证错误的 JSON 对象。

{
    "message": "The name field is required.",
    "errors": {
        "name": [
            "The name field is required."
        ]
    }
}

但是我的测试系统 运行 Linux/Apache/PHP 8.1 没有 return JSON 响应:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>422 Unprocessable Content</title>
</head><body>
<h1>Unprocessable Content</h1>
<p>The server understands the media type of the
request entity, but was unable to process the
contained instructions.</p>
</body></html>

这是我的代码:

api.php

Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'v1'], function () {
    Route::apiResource('clients', ClientApiController::class);
});

StoreClientRequest.php

public function rules()
{
    return [
        'name' => 'required|string|max:255',
    ];
}

ClientAPIController.php

public function store(StoreClientRequest $request)
{
    $client = Client::create($request->all())->fresh();

    return (new ClientResource($client))->response()->setStatusCode(201);
}

因为它在我的本地主机上工作,所以我不相信它是代码。我猜这是测试服务器上 Apache 或 PHP 配置的问题,但据我所知,我没有看到任何不同之处。由于一个是 Windows 而另一个是 Linux,因此检查差异并不直接。

为什么我没有从测试服务器收到 JSON 响应?

使用 php-fpm 时,Apache 丢弃响应正文似乎确实存在问题。我测试了 Apache、Nginx、mod-php 和 php-fpm.

的几种不同配置
Server PHP Response body
Apache mod-php Included
Apache php-fpm Missing
Nginx php-fpm Included

我发现一些链接存在请求正文被丢弃的问题,因此可能是同一件事或类似的事情。

https://www.jeffgeerling.com/blog/2017/apache-fastcgi-proxyfcgi-and-empty-post-bodies-chunked-transfer

看来我需要将其他应用程序升级到 PHP 8,这样我才能切换回 mod-php 或迁移到 nginx。谢谢大家的帮助。