【问题标题】:Cross-domain Ajax call vs php request [duplicate]跨域 Ajax 调用与 php 请求 [重复]
【发布时间】:2020-11-23 19:21:52
【问题描述】:

我读过有关跨域请求的文章。考虑到这个资源链接:

https://coinmap.org/api/v1/venues/?mode=list

为什么我可以用 PHP 向这个链接发出请求并获取数据,但我不能用 ajax 调用做同样的事情? 我收到此错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://coinmap.org/api/v1/venues/?mode=list. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

如果请求被阻止,为什么我可以使用 PHP 而不是 ajax 请求?

【问题讨论】:

  • 因为 PHP 使用 curl(或类似的)不是 ajax 调用。它几乎与使用 Web 浏览器直接点击 url 的用户完全一样……只是以编程方式。它是现代浏览器中的一项策略,用于保护随机用户免受恶意 js 代码的侵害。
  • @IncredibleHat 非常感谢你????

标签: php ajax cors


【解决方案1】:

您说您可以使用 PHP 发出请求,这听起来像您有一个锚点,其中 href=https://coinmap.org/api/v1/venues/?mode=list。

CORS 仅阻止通过 javascript 发起的请求。由于用户单击锚标记而发出的请求不受 CORS 限制。

【讨论】:

    【解决方案2】:

    简单回答:浏览器会阻止这种情况。

    因此,将 HTML 输出到浏览器的代码中放入标题:

    header('Access-Control-Allow-Origin: https://coinmap.org');
    

    您的 AJAX 调用将被允许在那里连接。

    【讨论】:

    • 谢谢。但我并不完全理解你的解决方案。此时我正在尝试从 localhost 向coinmap.org 进行 Ajax 调用。但是我应该把你写的代码放在哪里?!我无权访问coinmap.org 文件
    • 你的意思是我应该将此代码添加到包含我的 Ajax 调用的 PHP 文件中?!
    • 是的,您需要将其放入输出 HTML 和 AJAX 请求代码的文件中。也许这是你的 index.php。如果您不确定,您可以将它放在您的网络服务器配置或每个请求的 .htaccess 文件中。但更好的是只放置在需要的地方。
    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 2013-12-07
    • 2017-06-17
    • 2010-10-19
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多