【问题标题】:AJAX between a static webpage and google app-engine server sharing same TLD静态网页和共享相同 TLD 的谷歌应用引擎服务器之间的 AJAX
【发布时间】:2011-11-03 01:39:36
【问题描述】:

我的主要网站由可靠的静态网络托管服务托管。这只允许我托管静态文件,如 html、css、js 等。现在我几乎没有需要用户登录和数据存储的要求。我想我可以使用 App Engine Python 来处理这个问题。

我的应用类似于投票模块,所以我将使用它的示例来解释它。 我的计划是这样配置:

main website: www.example.com
appengine:    gae.example.com

在主网站上,匿名用户访问:http://www.example.com/vote.html,他应该会看到当前的投票状态(已从应用引擎检索)。和一个登录按钮(来自 twitter/facebook)。当他登录时,他应该能够投票并将投票保存回appengine服务器。

我可以处理大部分事情,但只有两个。 (考虑同源策略。)

  • 如何维护两个域名之间的身份验证。即www.example.comgae.example.com

  • 如何从www.example.comgae.example.com 发出HTTP POST 请求并使用返回的json 数据。

注意:我想尽可能避免使用 iframe。

【问题讨论】:

  • 是否有充分的理由不只提供来自 App Engine 的静态内容,并且不需要单独的子域?
  • @Wooble:网站很大,不是我维护的,静态托管服务为设计/维护/更新提供了出色的工具,正常运行时间确实接近 100%。 :-) 目前移动服务器不会产生积极影响。
  • 你真的把事情像这样分离出来让自己变得更复杂了。

标签: javascript python google-app-engine same-origin-policy


【解决方案1】:

您可以通过确保在根域上设置登录 cookie 并允许子域访问来维持两个子域之间的登录。子域将能够访问根域的 cookie。有关示例,请参阅https://serverfault.com/questions/153409/can-subdomain-example-com-set-a-cookie-that-can-be-read-by-example-com

我不相信您可以直接对另一个子域进行 ajax 调用。如果目标子域正在合作并支持 JSONP,那么您可以这样做(您最终会插入一个脚本标记并调用脚本,并且该脚本会用数据回调您)。由于脚本的加载不受同源策略的约束,您可以绕过它,但必须将目标子域配置为允许并支持 JSONP。

【讨论】:

    【解决方案2】:

    您需要使用 JSONP。

    子域实际上违反了同源策略。这是因为一些托管解决方案为不同的用户提供子域。这将允许用户攻击彼此的网站。

    见:Same Origin Policy - AJAX & using Public APIs

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2017-10-30
      • 2011-01-30
      相关资源
      最近更新 更多