Laravel 配置跨域

1、配置全局中间件

CORS 跨域需要服务端返回的 Response Headers 中返回允许跨域的参数。如下配置公共返回:


<?php

namespace App\Http\Middleware;

use Closure;

class CrossMiddleware

{

    /**

     * Handle an incoming request.

     * @param $request

     * @param Closure $next

     * @return mixed

     */

    public function handle($request, Closure $next)

    {

        $response = $next($request);

        $response->header('Access-Control-Allow-Origin', '*');

        $response->header('Access-Control-Allow-Headers', 'Keep-Alive,X-Requested-With,Cache-Control,Content-Type,auth,sign,Token,Pt,Xsign,toolken,code');

        $response->header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');

        $response->header('Access-Control-Allow-Credentials', 'true');

        $response->header('Access-Control-Max-Age', '3600');

        return $response;

    }

}

2、异常捕获

因为浏览器会发送 options 类型的请求,路由需要设置为此类型,但是接口过多设置起来十分麻烦。可以直接捕获 HttpException405 异常。

App\Exceptions\Handler 中做如下配置:


public function render($request, Throwable $exception)

{

  // 如果是跨域

  if ($exception instanceof HttpException && $request->method() == 'OPTIONS') {

    return response()->json();

  }

  return parent::render($request, $exception);

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
未知的永远是最精彩的!
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

推荐个laravel-cors

2年前 评论
看上隔壁小花了啦 (楼主) 2年前
just

好像不起作用

1年前 评论
看上隔壁小花了啦 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!