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
我发现一些链接存在请求正文被丢弃的问题,因此可能是同一件事或类似的事情。
看来我需要将其他应用程序升级到 PHP 8,这样我才能切换回 mod-php 或迁移到 nginx。谢谢大家的帮助。
我一直致力于 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 |
我发现一些链接存在请求正文被丢弃的问题,因此可能是同一件事或类似的事情。
看来我需要将其他应用程序升级到 PHP 8,这样我才能切换回 mod-php 或迁移到 nginx。谢谢大家的帮助。