跳到主要内容

Cookie limitations in Spaces

在 Hugging Face Spaces 中,应用在使用 cookie 时会受到一定限制。主要原因在于 Spaces 页面本身的结构:外层页面地址是 https://huggingface.co/spaces/<user>/<app>,而实际运行的应用托管在另一个域名(*.hf.space)下,并通过 iframe 嵌入。出于安全考虑,现代浏览器往往会限制来自“与父页面不同域名的 iframe 页面”的 cookie 行为。

使用 Docker SDK 托管 Streamlit 应用时的影响

一个比较典型的场景是:使用 Docker SDK 托管 Streamlit 应用。默认情况下,Streamlit 会开启基于 cookie 的 XSRF 保护机制。因此,在 HF Spaces 上,当 cookie 的使用受到限制时,某些需要向服务器提交数据的组件(例如 st.file_uploader())可能无法正常工作。

要绕过这个问题,你需要将 Streamlit 的 server.enableXsrfProtection 选项设置为 false。有两种方式可以做到这一点:

  1. 命令行参数:运行 Streamlit 应用时,可以在命令行中指定该选项。例如:

    streamlit run app.py --server.enableXsrfProtection false
  2. 配置文件:也可以在 Streamlit 的配置文件 .streamlit/config.toml 中设置:

    [server]
    enableXsrfProtection = false

[!TIP] 当你使用的是 Streamlit SDK(而不是 Docker SDK)时,无需手动处理这些细节,Spaces SDK 会自动为你完成相关配置。