Jupyter Notebook 跨域连接 Kernel 的方法
2018-03-08 15:30
1541 查看
通常一个新的 Notebook 在打开的时候,会自动连接当前服务器,创建一个 Session 和一个 Kernel 进程。该 Session 绑定在该 nb(notebook 简称,下同) 的路径上,因此你要你的 server 不停,无论刷新 nb 还是打开该 nb 的一个新 tab,该 session 都是同一个 session,kernel 也是同一个 kernel。
以上是 Notebook 基本的前后端交互流程,本文关注的是当 nb 与 Kernel 不在同一个域下时,如何跨域连接的问题。即假设 nb 的地址是
这里需要修改为你想要连接的域名,比如
session 与 kernel 创建完成后,nb 与 kernel 的交互会使用 websocket 通道。ws 地址是类似
这两处修改为跨域地址后,你的 nb 就会自动向新服务器发请求,那么自然你的新服务器需要在响应中添加跨域头,这一点可以简单通过修改配置文件实现:
该配置项会在
一是 xsrf token 认证,该认证可以在配置文件中关掉:
二是用户登录认证。server 默认使用 token 的方式,该 token 会在渲染 nb 的时候写入
或者想直接绕过 auth 过程的话,修改
完成以上修改后,跨域连接 kernel 的功能就可以实现了。
以上是 Notebook 基本的前后端交互流程,本文关注的是当 nb 与 Kernel 不在同一个域下时,如何跨域连接的问题。即假设 nb 的地址是
a.com/xx.ipynb,但我们想连接
b.com的一个 kernel。
修改后端地址
首先是创建 Session 的调用,该调用发生在session.js第 122 行
utils.ajax(this.session_service_url, {
这里需要修改为你想要连接的域名,比如
'http://b.com' + this.session_service_url。
session 与 kernel 创建完成后,nb 与 kernel 的交互会使用 websocket 通道。ws 地址是类似
ws://localhost这样的格式,定义在
notebook.html模板中,在打开 nb 时由 server 进行渲染:
data-ws-url="{{ws_url | urlencode}}"
这两处修改为跨域地址后,你的 nb 就会自动向新服务器发请求,那么自然你的新服务器需要在响应中添加跨域头,这一点可以简单通过修改配置文件实现:
c.NotebookApp.allow_origin = '*'
该配置项会在
/base/handlers.py中被访问:
[@property](https://my.oschina.net/property) def allow_origin(self): """Normal Access-Control-Allow-Origin""" return self.settings.get('allow_origin', '')
处理认证
当然 server 不是对连接来者不拒的。在认证上仍有两处需要处理:一是 xsrf token 认证,该认证可以在配置文件中关掉:
c.NotebookApp.disable_check_xsrf = True
二是用户登录认证。server 默认使用 token 的方式,该 token 会在渲染 nb 的时候写入
page.html里:
data-jupyter-api-token="{{token | urlencode}}"
或者想直接绕过 auth 过程的话,修改
base/handlers.py里的
get_current_user方法即可。
完成以上修改后,跨域连接 kernel 的功能就可以实现了。
相关文章推荐
- 远程连接服务器jupyter notebook、浏览器以及深度学习可视化方法
- jupyter notebook 增加kernel的方法
- 关于Github中的jupyter notebook文件(.ipynb)加载失败的解决方法
- internet初步【在linux中连接cluster, 配置并远程启动jupyter notebook】
- Jupyter Notebook各种使用方法记录
- jupyter notebook中创建tensorflow的kernel
- Jupyter notebook的安装方法
- jupyter notebook添加kernel
- jupyter notebook 多环境设置方法
- mac 下用chrome浏览器打开jupyter notebook 出现dead kernel问题
- 阿里云连接jupyter notebook的步骤
- Jupyter notebook 配置无问题 但就是无法远程访问,解决方法
- windows下安装双版本anaconda,以及配置jupyter notebook的kernel
- Python·Jupyter Notebook各种使用方法
- jupyter notebook添加Anaconda虚拟环境的python kernel
- jupyter notebook 的使用方法(持续更新)
- IPython notebook(Jupyter notebook)Python2和Python3内核(Kernel)共存
- jupyter notebook 安装多个版本kernel(python2 和python3)
- jupyter notebook使用不同的kernel
- jupyter notebook使用方法