插件窝 干货文章 跨域资源共享的救星:fruitcake/php-cors 库的使用指南

跨域资源共享的救星:fruitcake/php-cors 库的使用指南

CORS 请求 配置 中间件 739    来源:    2025-03-14

跨域资源共享(CORS)是前端开发中常见的问题,尤其是在开发前后端分离的应用时。CORS 是一种安全机制,用于控制哪些外部资源可以访问你的服务器。默认情况下,浏览器会阻止跨域请求,以防止恶意网站访问敏感数据。

fruitcake/php-cors 是一个用于处理 CORS 请求的 PHP 库,它可以帮助你轻松地配置和管理 CORS 策略。以下是如何使用 fruitcake/php-cors 库的指南。

1. 安装 fruitcake/php-cors

首先,你需要通过 Composer 安装 fruitcake/php-cors 库。在你的项目根目录下运行以下命令:

composer require fruitcake/php-cors

2. 配置 CORS 中间件

fruitcake/php-cors 库提供了一个中间件,你可以将其添加到你的应用中。以下是如何在 Laravel 中配置 CORS 中间件的示例。

2.1 在 Laravel 中配置

在 Laravel 中,你可以通过编辑 app/Http/Kernel.php 文件来全局应用 CORS 中间件:

protected $middleware = [
    // 其他中间件
    \Fruitcake\Cors\HandleCors::class,
];

2.2 配置 CORS 选项

你可以在 config/cors.php 文件中配置 CORS 选项。如果该文件不存在,你可以通过以下命令发布配置文件:

php artisan vendor:publish --tag="cors"

然后,你可以在 config/cors.php 文件中进行配置。以下是一个示例配置:

return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];
  • paths: 指定哪些路径应该应用 CORS 中间件。
  • allowed_methods: 允许的 HTTP 方法(例如 GET, POST, PUT, DELETE 等)。
  • allowed_origins: 允许访问的源(例如 http://example.com)。
  • allowed_headers: 允许的请求头。
  • exposed_headers: 暴露给客户端的响应头。
  • max_age: 预检请求的缓存时间(秒)。
  • supports_credentials: 是否允许发送凭据(如 cookies)。

3. 处理 CORS 请求

一旦配置完成,fruitcake/php-cors 中间件会自动处理 CORS 请求。当浏览器发送跨域请求时,中间件会自动添加适当的 CORS 头信息。

4. 测试 CORS 配置

你可以使用 Postman 或直接在浏览器中测试 CORS 配置。确保你的前端应用能够成功发送跨域请求并接收到响应。

5. 常见问题

5.1 预检请求(Preflight Request)

对于某些复杂的跨域请求(例如带有自定义头的请求),浏览器会先发送一个 OPTIONS 请求(预检请求)来检查服务器是否允许该请求。确保你的服务器正确处理 OPTIONS 请求。

5.2 凭据(Credentials)

如果你的应用需要发送凭据(如 cookies),请确保将 supports_credentials 设置为 true,并且在客户端请求中设置 withCredentialstrue

6. 总结

fruitcake/php-cors 是一个强大的工具,可以帮助你轻松处理跨域资源共享问题。通过简单的配置,你可以确保你的应用能够安全地处理跨域请求,同时保护你的服务器免受恶意攻击。

希望这篇指南能帮助你顺利解决 CORS 问题!如果你有任何问题或需要进一步的帮助,请随时提问。