5

我有 2 个域(域 A,域 B)。

在域 A 上放置了 ZF2 应用程序,一切正常。

在域 B 上放置着陆页(带有收集数据的表格的小站点)。

从登陆页面我想将表单数据发送到域 A 上的应用程序(AJAX 请求)。

不幸的是,域 A 上的 ZF2 应用程序没有收到数据,也没有显示结果。当我从 ZF2 应用程序所在的同一域发出 AJAX 请求时,一切正常。

我尝试使用 JSONP 但没有成功。

我没有任何其他线索如何强制它工作。

4

3 回答 3

7

正如 Bodgan 的回答所说,这是一个浏览器安全问题,而不是 ZF2 问题。解决此问题的一种流行方法是更改​​域 A 以允许来自域 B 的请求。有关HTTP 访问控制 (CORS)ACCESS-CONTROL-ALLOW-ORIGIN的 Mozilla Developer Network (MDN) 页面上讨论了此解决方案和其他解决方案。

基本上,您需要向接收服务器(域 A)表明可以响应资源请求。您可以在.htaccess域 A 的 Web 根目录中的文件中执行此操作。下面是一些简单的示例代码,向域 A 指示它应该响应来自所有域的资源共享请求:*. 上面链接的 MDN 文章对“跨域资源共享 (CORS)”进行了更深入的讨论。请记住,存在安全隐患,并且在大多数情况下,您不想将服务器开放给来自*源的请求,而是开放给您自己控制的特定主机。

Options +FollowSymlinks
RewriteEngine on

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
于 2012-11-28T22:39:42.477 回答
0

您可以更改您的 htaccess 文件以支持,但最简单的方法是使用响应类:

$this->_response->setHeader('Access-Control-Allow-Origin', '*');

http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html

如果您使用 json 作为端点数据源,请将其与 json helper 结合使用,后者将设置您的编码标头和其他一些东西

$this->_helper->json->sendJson($jsonIsite);

http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html

https://github.com/zf-fr/zfr-cors用于带有 ZF2 的高级 CORS,但上面的简单 json 端点应该可以正常工作。

于 2015-01-06T01:08:13.293 回答
-1

由于安全原因,禁止跨域 ajax 请求(这称为同源策略)。 http://en.wikipedia.org/wiki/Same_origin_policy

于 2012-11-28T16:43:58.567 回答