国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Webman使用阿里云SLB存在跨域問(wèn)題

Tinywan

阿里云SLB配置

跨域截圖

官方中間件也使用了

http://www.wtbis.cn/doc/webman/middleware.html

middleware.php 配置

return [
    '' => [
        \app\middleware\AccessControlMiddleware::class,
    ]
];

AccessControlMiddleware

declare(strict_types=1);

namespace app\middleware;

use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class AccessControlMiddleware implements MiddlewareInterface
{
    /**
     * @param Request $request
     * @param callable $next
     * @return Response
     */
    public function process(Request $request, callable $next): Response
    {
        $response = $request->method() == 'OPTIONS' ? response('') : $next($request);
        $response->withHeaders([
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With,Origin',
            'Access-Control-Allow-Methods' => 'GET,POST,PUT,DELETE,OPTIONS',
        ]);
        return $response;
    }
}

調(diào)試

var_dump(11111111111111);
$response = $request->method() == 'OPTIONS' ? response('') : $next($request);
var_dump(222222222222222);

使用Postman請(qǐng)求有打印

前端(Vue)請(qǐng)求沒(méi)有任何打印信息

3822 2 1
2個(gè)回答

walkor 打賞

是不是設(shè)置了路由,路由用any,不要用post,跨域請(qǐng)求可能有options請(qǐng)求,只設(shè)置post路由會(huì)導(dǎo)致跨域出現(xiàn)問(wèn)題。

  • Tinywan 2021-12-15

    post 修改成any 就可以了

  • walkor 2021-12-15

    跨域的接口用Route::any()或者 Route::add(['POST', 'OPTIONS'])

  • Tinywan 2021-12-15

    謝謝老大,我這邊嘗試一下

  • Tinywan 2021-12-17

    這個(gè)路由會(huì)有一個(gè)問(wèn)題,如果POST和PUT路徑一樣,同時(shí)使用 Route::add(['POST', 'OPTIONS'] 和 Route::add(['GET', 'OPTIONS'] ,系統(tǒng)會(huì)提示:FastRoute\BadRouteException: Cannot register two routes matching "/console/resources/(\d+)" for method "OPTIONS" in /vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php:111

  • walkor 2021-12-17

    Route::add(['POST', 'PUT', 'OPTIONS']); 放一起

  • Tinywan 2021-12-17

    我這個(gè)多條路由

    Route::group('/resources', function () {
        Route::get('', [ConsoleResource::class, 'getList']);
        Route::add(['POST', 'OPTIONS'],'', [ConsoleResource::class, 'create']);
        Route::put('/{id:\d+}', [ConsoleResource::class, 'update']);
        Route::delete('/{id:\d+}', [ConsoleResource::class, 'delete']);
        Route::add(['GET', 'OPTIONS'],'/{id:\d+}', [ConsoleResource::class, 'detail']);
        Route::add(['POST', 'OPTIONS'],'/{id:\d+}/authorize', [ConsoleResource::class, 'authorizeApi']);
    });
  • Tinywan 2021-12-17

    上面的路由 Route::put('/{id:\d+}', [ConsoleResource::class, 'update']); 由于這個(gè)正則 {id:\d+} 也跨域了

  • lscho 2021-12-17

    單獨(dú)在/resources 這個(gè)分組下面注冊(cè)一個(gè)OPTIONS類型,匹配所有請(qǐng)求就可以了。OPTIONS請(qǐng)求的作用只是預(yù)檢而已。

  • Tinywan 2021-12-17

    直接放在全局就也是可以的

    // 匹配所有options路由
    Route::options('[{path:.+}]', function (){
    return response('');
    });

  • walkor 2021-12-17

    如果一個(gè)uri的put get post等需要單獨(dú)的action處理的,lscho 給的方案是正解,單獨(dú)設(shè)置一個(gè)options路由。

    Route::group('/resources', function () {
        // 匹配 /resources 下的所有options路由
        Route::options('[{path:.+}]', function (){
            return response('');
        })->middleware([\app\middleware\跨域中間件類名::class]);
        // ........
    });
Sdioo

補(bǔ)充一句: 如果沒(méi)有使用route路由,跨域的話,可以參考

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??