在很早之前个人宣布了一个 PHP CORS 中间件!最初的初志是开辟一个替换 barryvdh/laravel-cors 包的东西,这个包的瑕玷在于保护不够,然后就是代码量巨大,支撑性也不多。固然也有上风,起首专注于 Laravel 框架,然后 Satr 较多运用者较多。固然大多数用来放到 Laravel 中够用。
上风
PHP CORS Middleware 代码量更少(中心代码仅四个文件,每一个文件拆分很精短),在 Laravel 中支撑形式更多,起首就是通例的全站都附加跨域信息,然后是可选仅预检,路由形式和婚配形式。有了这几个形式支撑,你能够指定特定路由跨域,也能够分配给组路透跨域等。
引荐:《PHP教程》
除了上述对 Laravel 支撑外,还很好了支撑以下体式格局:
● PHP 原生数组,能够运用数组来举行跨域相应头信息的吸收,开辟者能够自在处置惩罚。
● 支撑 PSR-7 的请乞降相应
● 支撑 PSR-15 中间件
● 支撑 Laravel/Lumen 框架
● 支撑 Swoft 框架
● 支撑 Slim 框架
● 支撑 ThinkPHP 5 框架
瑕玷
支撑了太多的框架,假如你仅在 Laravel 运用,代码包中还包含了其他框架的支撑代码,然则总量异常低,代码强迫症者能够受不了,过剩的支撑代码只要在对应框架中才会见效和被加载。
本次版本更新内容
跟着 PSR-15 的稳固,针对 PSR-15 中间件接口举行了重构。能够越发轻易的设置 CORS 信息
增添 Swoft 框架支撑见?
https://github.com/medz/cors/issues/6
本次更新内容的细致运用
PSR-15 中间件
先建立一个实例:
use Medz\Cors\PSR\CorsMiddleware; // Settings. $settings = [ 'allow-credentials' => false, 'allow-headers' => ['*'], 'expose-headers' => [], 'origins' => ['*'], 'methods' => ['*'], 'max-age' => 0, ]; // $cors = new Medz\Cors\Cors($settings); // Create CORS instance. // Create CORS middleware instance $middleware = new CorsMiddleware($settings /* $cors */ /* , true */ /* 是不是仅处置惩罚预检 */); // TODO.
能够看出,新版本能够直接从中间件组织参数举行通报设置了,之前版本必需通报一个 Medz\Cors\Cors 实例,固然,新版本也能够直接通报实例。第二个参数能够举行设置是不是仅处置惩罚预检要求,默许是处置惩罚悉数要求。
Swoft 中间件
在设置文件 config/properties/app.php 中举行以下设置:
'components' => [ 'custom' => [ 'Medz\\Cors\\Swoft\\', ], ], 'cors' => [ 'onlyPreflight' => false, // 是不是仅 OPTIONS 预检要求才举行跨域信息附加 'settings' => [ /// ... 参考 README 中的 PSR-7 ], ],
全局运用
翻开 app/config/beans/base.php 设置以下:
'serverDispatcher' => [ 'middlewares' => [ \Medz\Cors\Swoft\CorsMiddleware::class, ], ],
经由过程注解运用
经由过程 @Middleware 和 @Middlewares, 能够很轻易的设置中间件到当前的 Controller 和 Action 内。
● 当将此注解应用于 Controller 上,则作用域为全部 Controller
● 将此注解应用于 Action 上,则作用域仅为当前的 Action
use Swoft\Http\Server\Bean\Annotation\Controller; use Swoft\Http\Message\Bean\Annotation\Middleware; use Swoft\Http\Server\Bean\Annotation\RequestMapping; use Medz\Cors\Swoft\CorsMiddleware; /** * Setting Controller middleware. * * @Controller("middleware") * @Middleware(CorsMiddleware::class) */ class CorsOneController { // } /** * Setting Action middleware. */ class CorsTwoController { /** * @RequestMapping() * @Middleware(CorsMiddleware::class) */ public function corsAction(): array { return [ 'message' => 'The action using CORS.' ]; } }
其他
CORS 项目地点 https://github.com/medz/cors ,假如喜好,迎接 Star 迎接 Issues 迎接 PR。
Seven 的代码太渣,迎接关注我的新拓展包 medz/cors 处理 PHP 项目顺序设置跨域需求。
以上就是专注于处置惩罚 PHP 跨域的 CORS 中间件 1.4.0 版本更新的细致内容,更多请关注ki4网别的相干文章!