Streamlit 遇到 AxiosError: Request failed with status code 403 错误
使用 Streamlit 上传组件的时候遇到了AxiosError: Request failed with status code 403错误。
这个是由于 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
以上,本地开发推荐使用方法二,避免人为失误暴露风险。