同一域 Ajax/PHP 上的 CORS 问题

Posted

技术标签:

【中文标题】同一域 Ajax/PHP 上的 CORS 问题【英文标题】:CORS issue on same domain Ajax/PHP 【发布时间】:2021-11-22 08:18:10 【问题描述】:

我在使用 ajax 调用时遇到了 CORS 问题。 我有一个通过 ajax 调用的 php 文件,其中包含以下标题

header('Access-Control-Allow-Origin: * ');
header('Access-Control-Allow-Methods: GET, ADD, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: *'); // also tested with Content-Type, x-requested-with

调用文件时没有错误

http://www.mywebsite.com

但是当它被调用时会抛出 403 禁止错误

https://mywebsite.com
https://www.mywebsite.com

更具体地说,GET 是可以的,但不允许 ADD。 由于我们谈论的是同一个域,我不明白为什么会出现“403”错误

感谢您的帮助,

【问题讨论】:

使用方法ADD 意味着这将不再是simple request,而是导致preflighted request - 所以你的服务器端逻辑也需要正确处理。 但这听起来不像是我一开始就开始实施 CORS 的情况。 为什么可以通过无前缀和带 www 前缀的主机名访问您的网站?通常,您会决定使用一个版本,并在请求另一个版本时创建自动重定向......即使这不是一个选项,那么假设您的端点也可以通过这两个版本访问,它可能会那么,为您的请求使用 relative URL 仍然更有意义,这样它也不会是跨域的。 是的,可能是预检。顺便说一句,我第一次听到 ADD 方法,这真的正确吗? dariuscoder.com/2021/09/16/how-to-debug-cors 你可以在 nginx 上看到预检示例。为了获得更好的帮助 - 告诉我们您使用什么服务器,添加服务器配置。 【参考方案1】:

什么php框架 如果这是您使用的 laravel,请确保您看到文件 config/cors.php 或文件VerifyCsrfToken

     protected $except = [
        '*'
    ];

【讨论】:

以上是关于同一域 Ajax/PHP 上的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

springboot 跨域问题(CORS)

同一网址上的 CORS 问题 [重复]

由于跨域资源共享 (CORS),主机 Web 上的 SP.ClientContext 失败

托管在同一台服务器上的 Django 和 React 的 CORS 问题

在使用 Swagger 开发的 NodeJS 上的 ExpressJS 框架中启用跨域资源共享 (CORS)

从其他域(jquery ajax)访问托管在 aws ec2 上的 rest 服务但出现 CORS 错误