Access-Control-Allow-Origin , jquery mobile 不允许 Origin

Posted

技术标签:

【中文标题】Access-Control-Allow-Origin , jquery mobile 不允许 Origin【英文标题】:Origin is not allowed by Access-Control-Allow-Origin , jquery mobile 【发布时间】:2013-08-24 03:01:20 【问题描述】:

我正在本地服务器上开发一个 jQuery 移动网页。我正在使用 XAMPP,所以我有一个 Apache 服务器。

我正在尝试在我的页面中导入 Google 日历,但出现错误:

Access-Control-Allow-Origin 不允许 Origin

我发现了超过一百万条关于它的帖子,我一个都看不懂。

他们都在谈论我需要添加标题等的 php 文件。我没有任何 PHP 文件,都是 htmljavascript

我还读到,我可以配置 Apache 以便它允许我进行跨域连接。

来自here我引用:

如果您使用的是 Apache,只需添加:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

在您的配置中。这将导致您的所有回复 可从 Internet 上的任何其他站点访问的网络服务器。如果你 打算只允许特定主机上的服务使用 服务器,您可以将 * 替换为原始服务器的 URL。

我究竟应该在哪里添加这段代码?我尝试将其添加到httpd.conf,但没有任何改变。

有什么想法吗?

【问题讨论】:

这可能会有所帮助:enable-cors.org/server_apache.html pff 谢谢人,但它不起作用.. 好吧,如果您不告诉我们您到底做了什么,我们将无法帮助您。 “它不起作用”不是一个有用的问题描述。如果我按照那里的说明进行操作,它可能会起作用。无论如何,这个问题更多的是关于服务器配置,因此这里是题外话。 我完全按照我的描述以及您提供的文章中的描述做了。我重新启动了我的 apache,但仍然出现同样的错误。 【参考方案1】:

您应该在您的 PHP 服务器上启用 CORS,尝试在此处使用以下代码:

<?php
 header("Access-Control-Allow-Origin: *");

有关如何在您的服务器上启用 CORS 的更多信息,请参见此处: http://enable-cors.org/server_php.html

但请注意,如果您从无法控制且未启用 CORS 的服务器请求信息,则无法从 JavaScript 进行 AJAX 调用。

【讨论】:

【参考方案2】:

重新阅读您提供的 Apache 设置的说明:

这将使您的网络服务器的所有响应都可以从 Internet 上的任何其他站点访问。如果您打算只允许特定服务器使用您主机上的服务,您可以将 * 替换为原始服务器的 URL。

换言之,此设置会导致 Apache 服务器接受所有传入您的 服务器上托管的资源的跨域请求。

但这不是你想要的。您想通过跨域请求访问 Google 服务器上的资源。只有在他们允许的情况下,您才能访问这些资源。幸运的是,Google 日历有一个 API,允许您通过日历提供的方法访问日历。你应该去看看here。

【讨论】:

【参考方案3】:

您可以强制谷歌浏览器不要抱怨跨域来源 在运行 chrome 时添加此标志 --disable-web-security 将使您能够成功测试。 我已将其添加到桌面上 Chrome 快捷方式的目标变量中,如下所示:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security

因此,每次我启动 Chrome 时,它​​都会自动启动并使用此标志,我可以毫无问题地测试跨域 ajax 调用。

【讨论】:

以上是关于Access-Control-Allow-Origin , jquery mobile 不允许 Origin的主要内容,如果未能解决你的问题,请参考以下文章

PHP没有按顺序执行

跨域请求被阻止 Symfony/AngularJS

C# MVC js 跨域

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案