关于Laravel下Cors跨域POST要求的一种完成要领

之前做了一个公司的内部管理体系,如今愿望经由过程在钉钉上开辟一个小运用检察相干数据,在此过程当中触及了HTTP的跨域要求的题目,在相识相干信息后,盘算基于CORS完成。关于CORS(跨域资源共享),见这篇文章
CORS中,关于简朴要求,只需在服务器举行相干的字段考证后举行响应即可,主如果考证要求的泉源及要求的要领等是不是是服务器许可的。
而关于庞杂要求,则浏览器会先发送一个options要求到服务器举行考证,考证经由过程后,再发送用户的要求。再options要求中,服务器会返回许可的要求源、要求要领及头部字段等。

关于CORS在Laravel中的完成须要在项目中到场一个中间件Cors,

<?php

namespace App\Http\Middleware;

use Closure;

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        

        header("Access-Control-Allow-Origin: *");

        $headers = [
            'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin'
        ];

        $response = $next($request);
        foreach($headers as $key => $value) 
            $response->header($key, $value);
        return $response;
    }
}

关于简朴要求,比方get要求,在路由中到场该中间件即可。
但关于庞杂要求,则处置惩罚不了。(依据文档,POST要求满足某些前提是才是庞杂要求,但不晓得为什么,我发出的POST要求都是庞杂要求,即浏览器首先会触发一次options要求,再提交客户的现实要求)。
关于只是采用与简朴要求雷同的要领,则关于庞杂要求没法准确响应。

以下是GET要求的要求-响应信息:
《关于Laravel下Cors跨域POST要求的一种完成要领》

以下是POST要求的响应:
《关于Laravel下Cors跨域POST要求的一种完成要领》

可见POST要求中,浏览器先举行了OPTIONS要求,但该要求的响应中,并没有GET响应中的

Access-Control-Allow-Headers:Content-Type, X-Auth-Token, Origin
Access-Control-Allow-Methods:POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin:*

等跨域掌握字段。

经由过程查询材料,Laravel关于OPTIONS要求会自动通例响应200。所以缺乏必要的头部信息。
所以,我经由过程在路由中特地到场一个处置惩罚options的路由

Route::options('cors/test',function(){
    return response('ok')
                         ->header('Access-Control-Allow-Methods','POST, GET, OPTIONS, PUT, DELETE')
                         ->header('Access-Control-Allow-Headers','Content-Type, X-Auth-Token, Origin');
})->middleware('cors');

即保证了OPTIONS响应了必要的头部信息。
但该要领须要封闭Laravel中响应路由的CSRF功用,详细在AppHttpMiddlewareVerifyCsrfToken增加

protected $except = [
        'cors/*'
    ];

虽然处理了题目,但关于个中的许多细节照样不相识,须要进一步进修。

    原文作者:summac
    原文地址: https://segmentfault.com/a/1190000008736168
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞