php设置跨域-Laravel 中如何正确设置跨域

Laravel 是一个流行的 PHP Web 应用程序框架,提供了许多强大的功能,包括路由、中间件、ORM 等。 然而,当我们使用Laravel构建Web应用程序时,遇到跨域问题是很常见的。 跨域一般是因为浏览器的同源策略限制了不同域名对资源的访问。 因此,当我们向不同域发出请求时,需要设置跨域。

下面我们将介绍如何在 Laravel 中正确设置跨域。

1.安装“Barryvdh-cors”中间件

Laravel 相关的第三方软件包“Barryvdh-cors”可以帮助开发者解决跨域问题。 这个中间件由一个名叫“Barryvd.Heuvel”的英国人开发,允许 Laravel 在服务器端配置 CORS(跨源资源共享)。

要使用这个中间件,我们需要先安装它。 运行以下命令:

composer require barryvdh/laravel-cors

设置跨域域名_php设置跨域_设置跨域浏览器

登录复制

安装中间件后,我们需要将其注册到应用程序中。 打开 config/app.php 文件并将以下代码添加到提供程序列表中:

'providers' => [
    // ...
    BarryvdhCorsServiceProvider::class,
];

登录后复制

然后将以下代码添加到别名链表中:

'aliases' => [
    // ...
    'Cors' => BarryvdhCorsFacade::class,
];

登录后复制

2.配置中间件

设置跨域域名_设置跨域浏览器_php设置跨域

注册中间件后php设置跨域,我们需要在应用程序中对其进行配置。 打开config/cors.php文件,可以手动生成,如果没有请自动创建该文件。

在该文件中,可以配置允许跨域访问的域名、允许通过AJAX共享的HTTP请求技术等,配置示例如下:

return [
    'supports_credentials' => false,
    'allowed_origins' => ['*'],
    'allowed_headers' => ['Content-Type', 'Authorization'],
    'allowed_methods' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
    'exposed_headers' => [],
    'max_age' => 0,
];

登录后复制

在这个例子中,我们将允许所有来源的跨域访问,但只允许特定的请求方法和请求头。 如果您需要自定义更多选项,请查看[本文档]()。

3. 在路由或控制器中使用中间件

当我们已经安装并配置了“Barryvdh-cors”中间件后php设置跨域,我们可以在路由或控制器中使用它。

在路由中的使用:

设置跨域浏览器_php设置跨域_设置跨域域名

Route::get('/data', function () {
    return ['message' => 'Hello World'];
})->middleware('cors'); // Use cors middleware

登录后复制

在控制器中使用:

namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpControllersController;
use BarryvdhCorsHandleCors;
class ExampleController extends Controller
{
    /**
     * Use Cors middleware to handle the request
    */
    public function index(Request $request)
    {
        $middleware = new HandleCors();
        $response = $middleware->handle($request, function($request) {
            return ['message' => 'Hello World'];
        });
        return $response;
    }
}

登录后复制

4. 推论

通过“Barryvdh-cors”中间件,我们可以轻松解决 Laravel 应用中的跨域问题。 中间件除了支持路由和控制器外,还支持全局配置和分组配置,让我们可以更自由、更精准地控制跨域策略。