gpt4 book ai didi

google-app-engine - 具有自定义域的 Google App Engine Channel API

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:20 24 4
gpt4 key购买 nike

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

例如,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 被重定向到未记录但似乎是正如预期的那样。)

我假设,问题是由 channel.js 中的代码引起的,它没有使用原始主机调用我的应用程序,例如www.foo.com/_ah/channel/connected。相反,它使用 tallkadget.google.com 主机(据我所知)然后调用我的应用程序,但使用 myapp.appspot.com,忽略原始host,所以我不能将请求的 host 值用于我的目的。

作为解决方法,我可以想出一种将主机信息包含到 channel token 中的方法,这样当我的connecteddisconnected 处理程序接收到 token 时,它们可以请改用 token 。

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

这是我到目前为止尝试过的(没有任何成功):

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

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

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

<script type="text/javascript">
onOpened = function() {
// TODO
};
onMessage = function() {
// TODO
};
onError = function() {
// TODO
};
onClose = function() {
// TODO
};
goog.appengine.Socket.BASE_URL = "https://www.foo.com/_ah/channel/";
channel = new goog.appengine.Channel('{{channelToken}}');
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;
</script>

我找不到 channel.js 的任何官方文档,而且我不想实现在 Google 的下一次更新中很容易破坏的东西。

最佳答案

没有代理,我认为没有比在带内包含信息更好的方法了。问题是库/基础设施(如果不深入研究就无法确定)正在剥离 HTTP 层信息(主机 header ),实际上您无法控制 HTTP 层来传递自定义 header 等. 因此,您要么需要在较低层获得信息(TCP 甚至不提供执行此操作的方法,并且由于您的代码的入口点是通过运行 channel.js 的浏览器,而不是系统级进程在裸网络接口(interface)上运行,这绝对不在画面中)或在更高层,即。在 channel 内。

关于google-app-engine - 具有自定义域的 Google App Engine Channel API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com