簡體   English   中英

我可以向本地 Laravel API 發送 GET 請求,但所有 POST 請求都失敗

[英]I can send GET requests to a local Laravel API, but all POST requests fail

我有一個我正在嘗試設置的基本 Laravel API。 我已經設置了一個 CORS 中間件,並且我正在從不同的(本地)域向 API 發出請求(即, aaa.host是一個 React 前端,向bbb.host Laravel API 后端發出 Axios 請求)。

所有 GET 請求都成功通過 API 並返回響應,但我嘗試的任何 POST 請求都失敗了。 我的理解是 CSRF 令牌僅在 Laravel 中需要用於 Web 請求,而不是 API 請求。 因此,我無法理解我錯過了什么以及為什么 POST 請求沒有通過。 如果我將 POST 路由更改為 GET 路由,它會立即起作用,因此它是 POST 路由的事實似乎是問題所在。

以下是 Chrome 控制台中失敗的 POST 請求的示例:

在此處輸入圖片說明

我看過 Laravel API 文檔,但我不明白我錯過了什么。 有沒有人有任何想法? 另外,對於它的價值,我使用的是 Laravel 5.8.29。 謝謝你。


編輯:這是routes/api.php樣子:

Route::middleware(['cors'])->group(function () {
    Route::post('/missing-subpath-on-purpose/item/create', 'SomeController@createItem');
});

同樣,如果我將Route::post更改為Route::get並發出 Axios GET 請求而不是 POST,則它可以正常工作。

非常感謝 nice_dev 找出真正的問題並幫助我解決它。 結果證明 Laravel API 很好,並且從 Postman 向它發送 POST 請求也能正常工作。

問題出在瀏覽器本身。 如果您發送一個 Content-Type 為application/json的 POST 請求,瀏覽器將強制發生兩個請求,這會導致各種問題。 (我目前不知道這樣做的原因,但我相信瀏覽器制造商有他們這樣做的原因。)

盡管如此,通過將瀏覽器中所有 Axios 請求的默認 Content-Type 更改為application/x-www-form-urlencoded ,它解決了我的問題。 謝謝你。


編輯:在更多地玩弄這個之后,我意識到我確實想要發出application/json請求,但這樣做會導致上述 CORS 問題。

為了解決這個問題,我在 Laravel 中創建了以下 CORS 中間件:

<?php

    namespace App\Http\Middleware;

    use Closure;

    class Cors {
        public function handle($request, Closure $next) {
            header('Access-Control-Allow-Headers: *');
            header('Access-Control-Allow-Methods: *');
            header('Access-Control-Allow-Origin: *');

            return $next($request);
        }
    }

然后我將其添加到Kernel.php的全局中間件中,如下所示:

protected $middleware = [
    ..., // Other middleware here.
    \App\Http\Middleware\Cors::class,
];

我犯的錯誤是 CORS 中間件不是全局中間件的一部分,而是導致問題的路由中間件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM