当前位置: 首页 > 知识库问答 >
问题:

barryvdh/laravel-cors配置在Laravel 5.6中不起作用;忽略“允许的方法”

范成周
2023-03-14

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

我在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中使用“Origin:https://developer.mozilla.org”。

它正在工作 - 很好。如果我将该 Origin 密钥更改为除 https://developer.mozilla.org 以外的任何内容,它会抛出“CORS 策略中不允许”错误。这就是我所期望的,根据配置-罚款。

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

'allowedMethods' => ['GET']

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

为什么?为什么它不尊重配置中对allowed方法施加的限制?

共有1个答案

竺鸿骞
2023-03-14

在CORS协议中,服务器本身从不执行任何阻塞-

因此,设置 allowMethods 的唯一效果是使服务器发送具有特定值的 Access-Control-Allow-Methods 标头。否则,它不会使服务器本身进行阻塞。

浏览器仅在对CORS预验证OPTIONS请求的响应中检查该标头的值。因此,仅在这种情况下,如果OPTIONS响应中的Access-Control-Allow-方法的值不包含与您的代码尝试使用的方法匹配,预验证就会失败。

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

换句话说,在前端代码中有POST请求的情况下,不会发送或接收Access-Control-Allow-方法,但POST没有触发预检的特征。因此,在这种情况下,浏览器永远不会查阅Access-Control-Allow-方法标头的值。

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

 类似资料:
  • 这里有一个简单的endpoint,存在于/api/v1/jwt中 返回一个有效的JWT令牌。 但我的安全配置不再起作用,现在所有endpoint似乎都受到保护, Edit:antPathRequestMatcher没有为configure启动,但我甚至添加了websecurity configure的路径,我得到了以下日志记录

  • 我在Spring Boot(1.5.7.release)中添加了带有JWT身份验证的Spring Security性(5.0.0.release),但是CORS似乎不起作用。我添加了这里描述的CORS配置。我还尝试将@CrossOrigin添加到控制器中,但似乎没有改变任何东西。 和Spring Security调试日志: 下面是无效CORS请求的日志:

  • 问题内容: 我打算使用Ajax将跨域请求发送到soap Web服务。Web服务的URL是:http://example1.asmx?op = GetVOD 我的代码: 在IIS 7服务器端,我已经将这些行添加到文件web.config中 当我在Chrome上运行客户端代码时,出现405错误: 有谁知道如何解决这个问题? 预先感谢 问题答案: 听起来像Web DAV正在阻碍。这是删除它的配置: ht

  • 我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php:

  • 我使用从使用API的ReactJS发送数据,我得到一个错误: 以下是错误: CORS策略已阻止从来源“http://localhost/2019/EURDU/user_controllers/userregistercontroller/userregistration”访问位于“http://localhost:3000”的XMLHttpRequest:飞行前响应中的access-control

  • 该代码在我的本地开发环境中运行良好,但在我将其上载到服务器时,给出了一个异常。这个问题和这个问题的解决方案对我不起作用。 这是控制器。 这是routes文件中的相应条目。 这里是对URL的AJAX调用。 这就是示例测试用例的数据。 我如何克服这个错误,为什么这只发生在生产中? 值得注意的是,我在整个应用程序中还有其他对路由的AJAX调用,它们工作得很好。

  • 我使用axios调用api和承载令牌的方式进行授权,我的代码: 在用户存储库中。js时,将导入存储库并通过以下方式调用api: 然后错误是"未授权",但当我更新头: 错误是:在'http://example.com/users“起源”http://localhost:8080'已被CORS策略阻止:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允许来源。

  • 我有一个由Laravel后端提供服务的Vue.jsSPA。两者都是单独的项目。我正在使用水果蛋糕来处理CORS,但我一直收到这个错误: CORS策略已阻止从源“http://localhost:8081”访问“http://domain . test/API/v1/attributes/3”处的XMLHttpRequest:预检响应中的Access-Control-Allow-Methods不允许