我有2个域名(域名A,域名B)。
在域A上放置了ZF2应用程序,一切正常。
在域B上放置着陆页(带有表单的小站点来收集数据)。
从登陆页面我希望将表单数据发送到域A上的应用程序(AJAX请求)。
不幸的是,域A上的ZF2应用程序没有收到数据,也没有显示结果。 当我从ZF2应用程序所在的同一域制作AJAX请求时,一切正常。
我尝试过使用JSONP但没有成功。
我没有任何其他线索如何强迫它发挥作用。
答案 0 :(得分:7)
正如Bodgan所说,这是一个浏览器安全问题,而不是ZF2问题。一种流行的解决方法是更改域A的ACCESS-CONTROL-ALLOW-ORIGIN
以允许来自域B的请求。在HTTP access control (CORS)的Mozilla开发者网络(MDN)页面上讨论了此解决方案和其他解决方案。< / p>
基本上,您需要向接收服务器(域A)指出可以响应资源请求。您可以在域A的Web根目录中的.htaccess
文件中执行此操作。以下是一些简单的示例代码,它向域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"
答案 1 :(得分:0)
您可以将htaccess文件更改为支持,但最简单的方法是使用响应类:
$this->_response->setHeader('Access-Control-Allow-Origin', '*');
http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html
如果你使用json作为你的终点数据源,请将它与json帮助器一起使用,它将设置你的编码头和其他一些东西
$this->_helper->json->sendJson($jsonIsite);
http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html
对于带有ZF2的高级CORS有https://github.com/zf-fr/zfr-cors,但是带有上述内容的简单json端点应该可以正常工作。
答案 2 :(得分:-1)
出于安全原因,禁止跨域ajax请求(这称为同源策略)。 http://en.wikipedia.org/wiki/Same_origin_policy