首页 > 解决方案 > 在 Google Colab 上,来自 Javascript 的 localhost 访问失败

问题描述

我有一个 Javascript 片段,我的 Jupyter Notebook 安装到浏览器页面中。它访问在我的 PC 上运行的支持 REST 的交互式应用程序(即 Cytoscape)。

来自 Javascript 的 Cytoscape 调用的一个示例是“GET http://localhost:1234/v1/version”......由正常的 xmlHTTPRequest.send() 调用执行。

在其他 Jupyter Notebook 系统(例如 GenePattern Notebook)上,这可以正常工作。查看 Chrome 的网络跟踪,看起来我的 HTTP 调用被拦截了,并且对 colab 的单独调用似乎试图授权调用(???)。以下是 Chrome 在调试控制台中显示的内容:

在此处输入图像描述

colab 电话似乎发生在这里:https ://colab.research.google.com/v2/external/external_polymer_binary.js?vrz=colab-20200817-085601-RC01_327067882

最后,我的电话似乎被禁止了……我得到了一个 HTTP 状态 500。

知道如何说服 colab 让我对本地 Cytoscape 的 Javascript 级调用通过吗?任何信息都可能会有所帮助。

谢谢!

标签: javascriptlocalhostgoogle-colaboratorycytoscape

解决方案


Colab 中的请求localhost被重定向到 VM 后端。

详细信息在这里: https ://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo=R8ZvCXC5A0wT

一种解决方法是将请求定向到127.0.0.1而不是主机名localhost。只有localhost请求被拦截。

具体来说,此单元将从 Colab 后端 VM 获取:

%%javascript
// Fetches from the backend VM on port 1234.
fetch('http://localhost:1234/')

而此单元格将从运行浏览器的本地计算机中获取。

%%javascript
// Fetches from the machine running the browser.
fetch('http://127.0.0.1:1234/')

推荐阅读