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 文件,都是 html 和 javascript。
我还读到,我可以配置 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的主要内容,如果未能解决你的问题,请参考以下文章