CrossDomain.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\middleware;
  8. use Webman\Http\Request;
  9. use Webman\Http\Response;
  10. use Webman\MiddlewareInterface;
  11. /**
  12. * 跨域中间件
  13. */
  14. class CrossDomain implements MiddlewareInterface
  15. {
  16. public function process(Request $request, callable $handler) : Response
  17. {
  18. // Mini API owns its explicit-origin CORS policy; leave the existing admin policy unchanged.
  19. if (\app\miniapi\http\ApiResponse::owns($request)) return $handler($request);
  20. // 如果是options请求则返回一个空响应,否则继续向洋葱芯穿越,并得到一个响应
  21. $response = $request->method() == 'OPTIONS' ? response('') : $handler($request);
  22. // 给响应添加跨域相关的http头
  23. $response->withHeaders([
  24. 'Access-Control-Allow-Credentials' => 'true',
  25. 'Access-Control-Allow-Origin' => $request->header('origin', '*'),
  26. 'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
  27. 'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
  28. ]);
  29. return $response;
  30. }
  31. }