为什么PHP cURL可以执行请求,而jQuery AJAX不能


How come PHP cURL can perform a request, but jQuery AJAX doesn't?

我已经设置了一个简单的脚本,允许使用AJAX将数据发送到我的服务器:

$.ajax({
    url: url,
    type: method,
    data: data
}).done(function(data) {
    console.log(data);
});

现在,我已将以下访问控制允许规则添加到我的.htaccess

Header add Access-Control-Allow-Origin: "https://www.randomsite9734784.com"
Header add Access-Control-Allow-Methods: "DELETE"

这按预期工作:每当我发送 AJAX 请求时,我都会收到一条消息,指出源不匹配,等等,故事结束。完善。

现在,当我在 PHP 中使用我的 cURL 函数时,我设法执行了各种请求。我本来希望它有相同的响应,但不知何故它绕过了某种 .htaccess 文件。

我真的很想知道为什么会发生这种情况,以及如何保护自己免受这两种请求方法的影响。

谢谢!

编辑

仅供参考,这是我当前的 .htacess 文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Header add Access-Control-Allow-Origin: "http://somerandomdomain.com"
Header add Access-Control-Allow-Methods: "DELETE"

现在,要清楚:我想知道的只是如何确保(在这种情况下)只能从 somerandomdomain.com 执行删除请求,而不是来自各种位置的各种请求......

:-)谢谢。

jQuery/JavaScript 在客户端执行,浏览器应用跨源请求共享的限制。

服务器没有任何限制,只要 PHP 可以使用很多东西,例如 URL 和 fopen() 等。

这种限制的主要原因是,JavaScript 可以由客户端的任何人执行,而服务器端代码只能由有权访问服务器端脚本的人执行。当为新手用户提供要执行的 URL (AJAX 请求)时,它将在触发该 URL 的客户端上执行。

这打开了诸如访问域上的cookie,会话详细信息等问题。因此,例如,当您有一个可以使用GMail发送电子邮件的API时,并且您进入了一个恶意网站,则可能会有一个JavaScript,它可以触发AJAX请求说:

POST https://mail.google.com/api/mail/send

有一些细节,这会在您不知情的情况下执行,但使用您登录的凭据。这无法使用服务器端脚本来完成,因为没有什么比打开会话或流更受控制了。

我本来希望它有相同的响应,但不知何故它绕过了某种 .htaccess 文件。

你的.htaccess很弱,可以要求潜入。因此,您需要更正.htaccess文件。您可以发布.htaccess文件的来源,以便我们也可以为您提供建议。

我希望这回答了你的问题。

对于您的情况:如果您可以使用 CURL ,请使用 CURL,但如果您真的想使用 ajax,则需要在客户端和服务器端添加 CORS 访问权限(这是您构建自己的 API 的情况)如果您使用 extern API 众所周知,他们应该添加一个关于 CORS 问题的主题,该主题解释了您必须将哪些标头添加到您的请求中才能使其工作。我希望你明白我在说什么