【发布时间】:2019-11-18 07:49:30
【问题描述】:
在我的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 响应:
[
"not found"
]
正如预期的那样。
在哪里,当从 POST http://localhost/hello(没有 https)调用时,它将返回 405 Method Not Allowed 响应而是:
{
"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]) 中指定状态代码 时。否则,响应会按预期正常工作。
【问题讨论】:
-
您是否设置了重定向来发送 http -> https?如果是这样,那将丢失该方法并将其更改为 GET。
-
不,我不知道。我不知道当 https 路由到 ELB 中的 http 时,该方法会更改为 GET。但是,即使我在没有任何 ELB 的 localhost 环境中进行测试,问题仍然存在。
标签: php json laravel api https