Streamlit 遇到 AxiosError: Request failed with status code 403 错误

Streamlit 遇到 AxiosError: Request failed with status code 403 错误

使用 Streamlit 上传组件的时候遇到了AxiosError: Request failed with status code 403错误。

20240217175909.png

这个是由于 XSRF(跨站请求伪造) 造成的,做生产环境的时候都好解决,大部分其实是开发环境下遇到。

官方文档有专门提到这个错误,但是申明的原因和推荐解决方案试过,没啥用。

对于新手来说遇到这个问题基本摸不着头脑,干脆一点,开发环境下关闭 XSRF 就行,解决方案有两种。

方法一:增加配置文件

项目目录下新增一个 .streamlit 目录,目录中创建 config.toml 文件,这个是 Streamlit 的配置文件,文件内容如下:

[browser]
# 禁止收集使用统计数据
gatherUsageStats = false

[server]
# 禁止跨源资源共享(CORS)和跨站请求伪造(XSRF)保护
# enableCORS = false
enableXsrfProtection = false

这里主要是禁用了 enableXsrfProtection,创建完成后目录结构示例如下:

.
├── .streamlit
│   └── config.toml
└── app.py

重启 Streamlit 应用,再上传就不会有这个问题了。

方法二:运行命令加参数

配置文件的方法经常会忘了修改回来,毕竟这个属于安全配置,生产环境忘记启用影响很大。

比较保险的做法是本地开发的时候,运行命令带参数,如下:

streamlit run app.py --server.enableXsrfProtection=false

以上,本地开发推荐使用方法二,避免人为失误暴露风险。