在我的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])
中指定状态代码时,才会发生这种情况。否则,响应将按预期正常工作。
答案 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请求再次正常工作。
仍然感谢所有帮助。