使用中间件处理Cors error(一般请求)

简单请求

请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

只要同时满足上边两个条件的请求是简单请求,否则就是非简单请求

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
直白的讲就是 a.com 请求 b.com

Cors解决跨域(tp6.0)

创建cors中间件

在middleware目录下边创建一个Core.php的文件 中间件代码如下:

<?php
declare (strict_types = 1);
namespace app\home\middleware;
use Closure;
use think\Response;

class Cors
{
    /**
     * 设置跨域
     * @param $request
     * @param Closure $next
     * @return mixed|void
     */
    public function handle($request, Closure $next)
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Max-Age: 1800');
        header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE');
        header('Access-Control-Allow-Headers: Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, Token');
        if (strtoupper($request->method()) == "OPTIONS") {
            return Response::create()->send();
        }
        return $next($request);
    }
}

将cors.php注册到中间件 在middleware.php 代码如下:

    // 设置前端跨域 
    \app\home\middleware\Cors::class, // 这行代码添加到return的数组中

路由中使用这个中间件

Route::post('ajaxTest', 'index/ajaxTest')->middleware("\app\home\middleware\Cors::class");

参考文献:

阮一峰: 跨域资源共享 CORS 详解

阮一峰: 浏览器同源政策及其规避方法


本文链接:简单ajax跨域处理(中间件方式) - http://myags.cn/index.php/251.html

版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 options->title();?> 所有,未经允许不得转载!
最后修改:2021 年 03 月 21 日 10 : 36 PM
如果觉得我的文章对你有用,请随意赞赏