带有自定义域的Google App Engine渠道API

时间:2014-01-13 11:49:25

标签: google-app-engine channel-api

在我的GAE应用程序(Python)中,我基于请求对象的host部分实现了多租户和多站点支持。

例如,www.foo.com/index.htmlwww.bar.com/index.html都由同一个应用处理(例如myapp.appspot.com)。应用程序读取主机值,然后决定使用哪个命名空间和站点配置。只要应用程序直接从用户代理接收请求,这就很有效。

但是,我想使用Channel API,但是存在一个问题,因为对/_ah/channel/connected//_ah/channel/disconnected/的请求不是来自原始用户代理。相反,请求包含Host: myapp.appspot.com和参数to=myapp.appspot.com。 (from参数是我期望的标记。www.foo.com/_ah/channel/jsapi也被重定向到一个没有记录的talkgadget服务器,但似乎是预期的。)

我认为,问题是由channel.js中的代码引起的,该代码并未使用原始主机调用我的应用,例如www.foo.com/_ah/channel/connected。相反,它使用talkgadget.google.com主机(据我所知)将调用我的应用程序,但使用myapp.appspot.com,忽略原始主机,因此我无法使用请求' s {{ 1}}值得我的目的。

作为一种解决方法,我可以找到一种将主机信息包含在通道令牌中的方法,因此当我的hostconnected处理程序收到令牌时,他们可以使用该令牌。< / p>

但是,我想知道是否有更好的方法,我仍然可以获得disconnectedwww.foo.com的原始主机名(例如/_ah/channel/connected/)请求。有什么想法吗?

这是我迄今为止尝试过的(没有任何成功):

将自定义域名主机名添加到JS src属性:

/_ah/channel/disconnected/

我还尝试手动覆盖通道套接字的base-url,建议在此处:https://stackoverflow.com/questions/16558776/google-app-engine-channel-api-same-origin-policy

<script type="text/javascript" src="//www.foo.com/_ah/channel/jsapi"></script>

我无法找到channel.js的任何官方文档,我也不想通过Google的下一次更新来实现一些容易破解的内容。

1 个答案:

答案 0 :(得分:1)

没有代理,我没有看到比包含带内信息更好的方式。问题是库/基础设施(不能更深入地确定)是剥离HTTP层信息(主机头),实际上你没有任何HTTP层的控制权通过因此,您需要在较低层提供信息(TCP甚至不提供执行此操作的方法,并且因为代码的入口点是通过浏览器运行channel.js,而不是而不是在裸网络接口上运行的系统级进程,这是决定性的,或在更高层,即。在渠道内。