【问题标题】:Laravel 404 JSON response returning different message in HTTP & HTTPSLaravel 404 JSON 响应在 HTTP 和 HTTPS 中返回不同的消息
【发布时间】: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()-&gt;json($data, [status code]) 中指定状态代码 时。否则,响应会按预期正常工作。

【问题讨论】:

  • 您是否设置了重定向来发送 http -> https?如果是这样,那将丢失该方法并将其更改为 GET。
  • 不,我不知道。我不知道当 https 路由到 ELB 中的 http 时,该方法会更改为 GET。但是,即使我在没有任何 ELB 的 localhost 环境中进行测试,问题仍然存在。

标签: php json laravel api https


【解决方案1】:

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

尝试返回不同的东西,比如 dd("Hello World");如果它正在加载页面,则必须存在错误或其他问题。

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

【讨论】:

  • 仅供参考,发送的请求是 POST 请求。有问题的中间件是 TrustProxies,此处解释:laravel.com/docs/5.8/requests#configuring-trusted-proxies我会尝试您的故障排除建议。
  • 那么问题就简单了。您没有发出发布请求;错误是直截了当的“此路由不支持 GET 方法。支持的方法:POST。”。更改路线::post('hello', 'MyController@greet');到 Route::get('hello', 'MyController@greet');我想它会解决的,通过你的浏览器提出请求
  • 要明确,我需要将路由设为 POST 方法,因为我还在发出的请求中发送 POST 正文数据。
【解决方案2】:

我解决了。

原来我使用的是来自https://laravel.com/docs/5.8/deployment#server-configuration 的 nginx 配置并包含以下行:

error_page 404 /index.php;

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

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

感谢所有的帮助。

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2017-09-24
    相关资源
    最近更新 更多