gpt4 book ai didi

laravel - barryvdh/laravel-cors 配置在 Laravel 5.6 中不起作用;忽略 'allowedMethods'

转载 作者:行者123 更新时间:2023-12-05 04:05:20 25 4
gpt4 key购买 nike

我已经安装了 barryvdh/laravel-cors在我的 Laravel 5.6 应用程序中打包,并将相关行添加到 app\Http\Kernel.php 中的中间件组,并按照说明发布配置文件。

我在 VerifyCsrfToken.php 中禁用了对我的 api 路由的 CSRF 检查

protected $except = [
'api'
];

我已将配置文件设置如下:

'supportsCredentials' => false,
'allowedOrigins' => ['https://developer.mozilla.org'],
'allowedHeaders' => ['Content-Type', 'X-Requested-With'],
'allowedMethods' => ['GET', 'POST', 'PUT', 'DELETE']
'exposedHeaders' => [],
'maxAge' => 0,

...我已经在 Postman 中使用 header 中的“Origin: https://developer.mozilla.org”运行测试 POST 请求。

一切正常。如果我将该 Origin key 更改为 https://developer.mozilla.org 以外的任何其他内容它抛出“在 CORS 政策中不允许”。错误。根据配置,这正是我所期望的。

但是如果我将配置行更改为

'allowedMethods' => ['GET']

(即仅允许 GET 请求),并在 Postman 中运行相同 POST 请求...它仍然有效。

为什么?为什么它不遵守配置中对 allowedMethods 施加的限制?

最佳答案

在 CORS 协议(protocol)中,服务器本身从不做任何阻塞——相反,阻塞是由浏览器完成的,并且仅由浏览器完成,并且仅针对在浏览器中运行的前端 JavaScript 代码的情况(而不是,例如,当使用 Postman 时)或发送请求的东西)。

因此设置allowedMethods 的唯一效果是使服务器发送具有特定值的Access-Control-Allow-Methods header 。它不会以其他方式使服务器本身阻塞。

只有在响应 CORS 预检 OPTIONS 请求时,浏览器才会检查该 header 的值。因此只有在这种情况下,如果 OPTIONS 响应中的 Access-Control-Allow-Methods 的值不包含您的代码尝试使用的方法的匹配项, 预检失败。

但如果您的前端代码的请求不是触发预检的请求,浏览器会直接发送它,即使为 allowedMethods 设置的值不包括您的代码使用的请求方法名称。

换句话说,如果您在前端代码中有一个 POST 请求,则不会发送或接收 Access-Control-Allow-Methods,但是POST 没有触发预检的特征。因此,在这种情况下,浏览器永远不会查询 Access-Control-Allow-Methods header 的值。

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests列出了将触发 CORS 预检的特征,但在 POSTGET 请求的情况下,它基本上相当于您的代码是否向请求添加了任何自定义 header 。

关于laravel - barryvdh/laravel-cors 配置在 Laravel 5.6 中不起作用;忽略 'allowedMethods',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51422009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com