You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Bokeh的autoload.js设置静态资源路径前缀(代理场景)

解决Bokeh Server在nbserverproxy代理下的资源路径问题

嘿,我来帮你搞定这个资源路径不匹配的问题!这种情况是因为Bokeh默认会基于当前域名的根路径来加载静态资源和建立WebSocket连接,但你的服务部署在example.com/proxy/<port>/<path>这样的代理路径后,必须显式告诉Bokeh要使用这个代理路径作为资源根目录。

下面是具体的解决步骤:

1. 生成script标签时指定root_url参数

不管你是手动写script标签还是用Bokeh的Python工具生成,都需要添加root_url属性,让Bokeh知道所有资源请求都要基于这个代理路径。

比如针对端口45740,手动编写的script标签应该是这样的:

<script src="https://example.com/proxy/45740/static/js/bokeh.min.js"
        root_url="https://example.com/proxy/45740/"
        id="bokeh-script"></script>

如果是用Python的components函数生成嵌入代码,要在调用时传入root_url参数:

from bokeh.embed import components

# 假设your_bokeh_doc是你的Bokeh文档对象
script, div = components(your_bokeh_doc, root_url="https://example.com/proxy/45740/")

这样生成的script标签会自动包含正确的root_url属性,确保所有静态资源(比如JS、CSS)和WebSocket连接都指向代理后的路径。

2. 启动Bokeh Server时添加--prefix参数

光前端设置还不够,后端的Bokeh Server也需要识别这个代理前缀,这样它才能正确处理来自/proxy/<port>/路径的请求。启动命令要加上--prefix:

bokeh serve --port 45740 --prefix /proxy/45740/ your_app.py

这个参数会让Bokeh Server把所有请求的路径都加上/proxy/45740/前缀,和nbserverproxy的代理规则匹配。

为什么之前的标签不生效?

之前的script标签没有指定root_url,Bokeh会默认使用当前页面的根路径(比如/)来拼接资源地址,导致请求变成/static/js/...而不是/proxy/45740/static/js/...,自然就无法正确加载资源了。

只要同时做好前端root_url和后端--prefix的配置,就能让所有资源请求和WebSocket连接都完美适配nbserverproxy的代理路径啦!

内容的提问来源于stack exchange,提问作者tam203

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:46