Ответ LSONvel 404 JSON, возвращающий другое сообщение в HTTP и HTTPS - PullRequest
0 голосов
/ 08 июля 2019

В моем 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-трафик, но маршрутизирует обратно к экземплярам Auto Scaling через HTTP в локальной сети VPC.

Итак, мой вопрос в том, что является причиной этого, и как я могу запретить Laravel возвращать другой ответ, основанный на протоколе URL?

EDIT: Обратите внимание, что это происходит только тогда, когда я указываю код состояния в response()->json($data, [status code]).В противном случае ответ работает нормально, как и ожидалось.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Я решил это.

Оказывается, я использовал конфигурацию nginx из https://laravel.com/docs/5.8/deployment#server-configuration и включил следующую строку:

error_page 404 /index.php;

Это вызывает все 404 ответаперенаправить на страницу /index.php, которая не определена в моих маршрутах Laravel, и путь ожидает GET вместо метода POST.Следовательно, он возвращает сообщение об ошибке, указанное в моем вопросе выше.

После удаления указанной выше строки конфигурации в моей конфигурации nginx мои POST-запросы с 404 ответами снова работают правильно.

Спасибо за всев любом случае помощь.

0 голосов
/ 08 июля 2019

Ни один из них не должен работать, потому что вы определили свой маршрут как пост. Ваши запросы - это запросы на получение. Похоже, что промежуточное ПО имеет более высокий приоритет и вызывается, когда это HTTP-запрос для контроля недопустимых запросов.

Попробуйте вернуть разные вещи, такие как dd ("Hello World"); если он загружает страницу, должна быть ошибка или что-то в этом роде.

Временно добавьте промежуточное ПО в маршрут для перенаправления запросов на один из протоколов HTTP или HTTPS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...