swoole使用CORS方式解决跨域

发布时间 2023-08-06 11:15:05作者: jingjingxyk

文档说明: 只记录关键地方; 文档创建时间:2023-08-06;
目标:使用CORS 方式解决跨域
备注: 常用到的功能记录一下,方便使用

<?php

use Swoole\Http\Request;
use Swoole\Http\Response;
use Swoole\Coroutine\Http\Server;
use function Swoole\Coroutine\run;

run(function () {
    $server = new Server('0.0.0.0', 9502, false);
    $server->handle('/', function (Request $request, Response $response) {

        $response->header('Content-Type', 'application/json; charset=utf-8');

        $response->header('access-control-allow-credentials', 'true');
        $response->header('access-control-allow-methods', 'GET,HEAD,POST,OPTIONS');
        $response->header('access-control-allow-headers', 'content-type,Authorization');
        $response->header('Access-Control-Allow-Private-Network', 'true');
        $origin = empty($request->header['origin']) ? '*' : $request->header['origin'];
        $response->header('access-control-allow-origin', $origin);
        $request_method = empty($request->header['request_method']) ? '' : $request->header['request_method'];
        if ($request_method == "OPTIONS") {
            $response->status(200);
            $response->end();
            return null;
        }

        list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
        $result = [];
        try {
            $response->end(
                json_encode(
                    [
                        'code' => 200,
                        "msg" => 'success',
                        "data" => $result
                    ],
                    JSON_UNESCAPED_UNICODE
                )
            );
        } catch (\RuntimeException $e) {
            echo $e->getMessage();
            $response->end(json_encode(["code" => 500, 'msg' => 'system error' . $e->getMessage()]));
        }
    });

    $server->start();
});