跨域 Ajax 调用与 php 请求 [重复]

Posted

技术标签:

【中文标题】跨域 Ajax 调用与 php 请求 [重复]【英文标题】:Cross-domain Ajax call vs php request [duplicate] 【发布时间】: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 非常感谢你???? 【参考方案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 文件中。但更好的是只放置在需要的地方。

以上是关于跨域 Ajax 调用与 php 请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何发送跨域ajax请求[重复]

跨域 AJAX 调用 [重复]

跨域与防止表单重复提交

使用 JSON 的跨域请求 [重复]

如何在ajax中解决跨域[重复]

如何解决ajax跨域问题(转)