Laravel 404 JSON响应在HTTP和HTTPS中返回不同的消息

时间:2019-07-08 18:52:07

标签: php json laravel api https

在我的routes/api.php中,我有一条 POST 方法路线,例如:

Route::post('hello', 'MyController@greet');

app/Http/Controllers/MyController.php中,greet()方法的定义如下:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class MyController extends Controller
{
    public function greet(Request $request)
    {
        return response()->json(['not found'], 404);
    }
}

现在,根据所调用的URL协议,响应将返回完全不同的消息:

通过POST https :// localhost / hello进行呼叫将返回 404 未找到响应:

[
    "not found"
]

符合预期。

在哪里,从POST http :// localhost / hello(没有http s )进行调用时,它将返回 405 不允许的方法响应代替:

{
    "message": "The GET method is not supported for this route. Supported methods: POST."
}

这是一个问题,因为我将服务器设置在AWS ELB后面,该服务器仅接受HTTPS流量,但将通过本地VPC网络中的HTTP路由回到Auto Scaling实例。

所以我的问题是什么原因造成的?如何防止Laravel根据URL协议返回不同的响应?

编辑:请注意,只有当我在response()->json($data, [status code])中指定状态代码时,才会发生这种情况。否则,响应将按预期正常工作。

2 个答案:

答案 0 :(得分:0)

这些都不需工作,因为您已将路线定义为帖子。您的请求是“获取”请求。似乎中间件的优先级更高,当它是HTTP请求来控制非法请求时就会被调用。

尝试返回诸如dd(“ Hello World”);之类的不同内容;如果正在加载页面,则必须是错误或其他内容。

临时向路由添加中间件,以将请求重定向到HTTP或HTTPS协议之一

答案 1 :(得分:0)

我解决了。

事实证明,我正在使用https://laravel.com/docs/5.8/deployment#server-configuration中的nginx配置,并包含以下行:

error_page 404 /index.php;

这会导致所有404响应重定向到我的Laravel路由中未定义的/index.php页面,并且该路径需要GET而不是POST方法。因此,它返回上面我的问题中所述的错误消息。

在我的nginx配置中删除上述配置行后,带有404响应的POST请求再次正常工作。

仍然感谢所有帮助。