Flutter跨域资源共享插件jaguar_cors的使用

Flutter跨域资源共享插件jaguar_cors的使用

示例

一个完整的示例可以在这里找到。

library main;

import 'dart:async';
import 'package:jaguar/jaguar.dart';
import 'package:jaguar_cors/jaguar_cors.dart';

// 配置CORS选项
static const corsOptions = const CorsOptions(
  allowedOrigins: const ['http://mine.com'],
  allowAllHeaders: true,
  allowAllMethods: true);

@Api(path: '/api')
class Routes extends Object with CorsHelper {
  // GET 请求处理
  [@Route](/user/Route)(methods: const ['GET', 'OPTIONS'])
  Response<String> get(Context ctx) {
    cors(ctx); // 调用CORS中间件
    if(ctx.req.method != 'GET') return null; // 跳过预检请求
    return Response.json('Hello foreigner!'); // 返回响应
  }

  // POST 请求处理
  [@Route](/user/Route)(methods: const ['POST', 'OPTIONS'])
  Future<Response<String>> post(Context ctx) async {
    cors(ctx); // 调用CORS中间件
    if(ctx.req.method != 'POST') return null; // 跳过预检请求
    return Response.json(await ctx.req.bodyAsJson()); // 返回响应
  }
}

// 启动服务器
main() async {
  final server = Jaguar(port: 9000);
  server.addApi(reflect(Routes())); // 添加路由
  server.log.onRecord.listen(print); // 打印日志
  await server.serve(); // 启动服务器
}

配置CORS拦截器

CorsOptions 用于配置 cors 中间件。

  • allowedOrigins <List<String>>: 允许执行跨域请求的源列表。设置 allowAllOriginstrue 可以覆盖 allowedOrigins 并允许所有源。
  • allowAllOrigins <bool>: 是否允许所有源。如果设置为 true,将覆盖 allowedOrigins 选项。
  • allowedMethods <List<String>>: 客户端可以使用的跨域请求的方法列表。默认值是简单方法(GETPOST)。
  • allowAllMethods <bool>: 是否允许所有方法。如果设置为 true,将覆盖 allowedMethods 选项。
  • allowedHeaders <List<String>>: 客户端可以使用的非简单头部列表。
  • allowAllHeaders <bool>: 是否允许所有头部。如果设置为 true,将覆盖 allowedHeaders 选项。
  • exposeHeaders <List<String>>: 指示哪些头部对CORS API规范安全可见。
  • exposeAllHeaders <bool>: 是否暴露所有头部。如果设置为 true,将覆盖 exposeHeaders 选项。
  • allowCredentials <bool>: 表示请求是否可以包括用户凭证,如cookie、HTTP认证或客户端SSL证书。默认为 false
  • maxAge <int>: 表示预检请求的结果可以缓存的时间(秒)。默认为 0,表示无最大缓存时间。
  • vary <bool>:
  • allowNonCorsRequests <bool>: 是否允许非CORS请求?

更多详情请参见API文档

示例

static const options = const CorsOptions(
      allowedOrigins: const ['http://mine.com'],
      // allowedHeaders: const ['X-Requested-With'],
      allowAllHeaders: true,
      allowAllMethods: true);

包装CORS拦截器

cors 拦截器本身使用起来很简单,它接受一个 CorsOptions 对象作为配置。

注意

  1. 确保路由处理函数接受 OPTIONS 方法。
  2. 如果相同的路由处理函数用于处理预检和实际请求,那么在预检请求期间会跳过实际请求的主体。
[@Route](/user/Route)(methods: const ['GET', 'OPTIONS'])
Response<String> get(Context ctx) {
  cors(ctx); // 调用CORS中间件
  if(ctx.req.method != 'GET') return null;  // 跳过预检请求
  return Response.json('Hello foreigner!'); // 返回响应
}

示例

[@Route](/user/Route)(methods: const ['GET', 'OPTIONS'])
Response<String> get(Context ctx) {
  cors(ctx); // 调用CORS中间件
  if(ctx.req.method != 'GET') return null; // 跳过预检请求
  return Response.json('Hello foreigner!'); // 返回响应
}

更多关于Flutter跨域资源共享插件jaguar_cors的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter跨域资源共享插件jaguar_cors的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter后端服务中使用jaguar_cors插件来处理跨域资源共享(CORS)的一个代码示例。虽然Flutter主要用于构建前端应用,但Flutter生态中也支持使用Dart来构建后端服务,jaguar框架就是其中之一。

首先,确保你的Flutter项目中包含jaguarjaguar_cors依赖。你可以通过编辑pubspec.yaml文件来添加这些依赖:

dependencies:
  jaguar: ^3.0.0 # 请检查最新版本号
  jaguar_cors: ^3.0.0 # 请检查最新版本号

然后运行flutter pub get来安装这些依赖。

以下是一个使用jaguarjaguar_cors构建简单后端服务的示例代码:

import 'package:jaguar/jaguar.dart';
import 'package:jaguar_cors/jaguar_cors.dart';

void main() {
  // 创建一个Jaguar服务器实例
  var server = Jaguar(port: 8080);

  // 配置CORS策略
  var cors = Cors()
    ..allowOrigins(['http://localhost:3000']) // 允许的前端域名列表
    ..allowMethods(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']) // 允许的HTTP方法
    ..allowHeaders(['Content-Type', 'Authorization']) // 允许的请求头
    ..allowCredentials(true); // 是否允许发送Cookies

  // 使用中间件应用CORS策略
  server.use(cors.middleware);

  // 定义一个简单的路由
  server.get('/hello', (ctx) => Response.ok('Hello, World!'));

  // 启动服务器
  print('Server is running at http://localhost:8080');
  server.listen();
}

在这个示例中:

  1. 我们创建了一个Jaguar服务器实例,并指定了监听端口为8080。
  2. 配置了一个Cors实例,允许来自http://localhost:3000的请求,并允许常见的HTTP方法、特定的请求头,以及允许发送Cookies。
  3. 使用server.use(cors.middleware)将CORS中间件应用到服务器上。
  4. 定义了一个简单的路由/hello,当访问这个路由时会返回Hello, World!
  5. 最后,启动服务器。

这样,当从http://localhost:3000发起跨域请求到http://localhost:8080/hello时,由于CORS策略已经配置好,请求会被正确处理并返回预期响应。

请注意,这个示例是针对Flutter后端服务的。如果你是在构建一个纯前端Flutter应用,通常不需要直接处理CORS,因为CORS是由后端服务来处理的。Flutter前端应用只需要按照正常的HTTP请求方式发送请求即可。

回到顶部