我有2个域(域A,域B)。Zend Framework 2 - AJAX来自其他服务器的请求
在域A置于ZF2应用程序,一切正常。
在域B上放置着陆页(小型站点用表单收集数据)。
来自着陆页我希望将表单数据发送到域A(AJAX请求)上的应用程序。
域A上的不幸ZF2应用程序未收到数据,也未显示结果。 当我从ZF2应用程序所在的同一个域发出AJAX请求时,一切正常。
我试图使用JSONP但没有成功。
我没有任何其他线索如何迫使这个工作。
我有2个域(域A,域B)。Zend Framework 2 - AJAX来自其他服务器的请求
在域A置于ZF2应用程序,一切正常。
在域B上放置着陆页(小型站点用表单收集数据)。
来自着陆页我希望将表单数据发送到域A(AJAX请求)上的应用程序。
域A上的不幸ZF2应用程序未收到数据,也未显示结果。 当我从ZF2应用程序所在的同一个域发出AJAX请求时,一切正常。
我试图使用JSONP但没有成功。
我没有任何其他线索如何迫使这个工作。
由于安全原因(这称为“相同原点策略”),禁止跨域ajax请求。 http://en.wikipedia.org/wiki/Same_origin_policy
正如Bodgan的回答所述,这是浏览器安全问题,而不是ZF2问题。解决此问题的一种常用方法是更改域A的ACCESS-CONTROL-ALLOW-ORIGIN
以允许来自域B的请求。此解决方案和其他解决方案在Mozilla开发人员网络(MDN)页面上讨论,用于HTTP access control (CORS)。
基本上,您需要向接收服务器(域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"
这也可以在php中使用header()函数来完成,如下所示:'header('Access-Control-Allow-Origin:*');',但是请记住它必须在任何输出发送到浏览器。另请参见:http://enable-cors.org/和http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains – David
你可以改变你的htaccess文件支持,但最简单的方法是使用的响应类:如果您正在使用JSON作为结束点的数据源
$this->_response->setHeader('Access-Control-Allow-Origin', '*');
http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html
,与json帮手一起使用这将设置您的编码头和其他一些东西
$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先进的CORS与ZF2,但上面的应该只是罚款一个简单的JSON端点。
在我的例子我使用了一个通配符CORS * - 确保你做了你的研究,并使用适当的域来保证安全 – dmo
感谢您的回答。 – user1853459