在我的GAE应用程序(Python)中,我基于请求对象的host
部分实现了多租户和多站点支持。
例如,www.foo.com/index.html
和www.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}}值得我的目的。
作为一种解决方法,我可以找到一种将主机信息包含在通道令牌中的方法,因此当我的host
和connected
处理程序收到令牌时,他们可以使用该令牌。< / p>
但是,我想知道是否有更好的方法,我仍然可以获得disconnected
和www.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的下一次更新来实现一些容易破解的内容。
答案 0 :(得分:1)
没有代理,我没有看到比包含带内信息更好的方式。问题是库/基础设施(不能更深入地确定)是剥离HTTP层信息(主机头),实际上你没有任何HTTP层的控制权通过因此,您需要在较低层提供信息(TCP甚至不提供执行此操作的方法,并且因为代码的入口点是通过浏览器运行channel.js,而不是而不是在裸网络接口上运行的系统级进程,这是决定性的,或在更高层,即。在渠道内。