【问题标题】:Zend Framework 2 - AJAX Request from other serverZend Framework 2 - 来自其他服务器的 AJAX 请求
【发布时间】:2015-01-06 09:08:13
【问题描述】:

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

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

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

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

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

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

我不知道如何强制它工作。

【问题讨论】:

    标签: php ajax zend-framework2 cross-domain-policy


    【解决方案1】:

    正如 Bodgan 的回答所说,这是一个浏览器安全问题,而不是 ZF2 问题。解决此问题的一种流行方法是更改​​域 A 的 ACCESS-CONTROL-ALLOW-ORIGIN 以允许来自域 B 的请求。此解决方案和其他解决方案在 HTTP access control (CORS) 的 Mozilla 开发人员网络 (MDN) 页面上进行了讨论。

    基本上,您需要向接收服务器(域 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"
    

    【讨论】:

    【解决方案2】:

    您可以更改您的 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 端点应该可以正常工作。

    【讨论】:

    • 在我的示例中,我使用了 CORS 通配符 * - 确保您进行研究并使用适当的域来确保安全
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 2012-06-10
      • 1970-01-01
      • 2011-09-02
      • 2018-01-09
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多