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

调用FastAPI接口时Cookie无法创建的问题求助

问题分析与解决方案

核心错误原因

  • 请求发起方错误:你前端代码中用requests.get调用后端接口,这是前端服务(服务器端)发起的HTTP请求,并非用户浏览器发起的请求。后端设置的Cookie会被requests库的会话保存,不会传递到用户的浏览器中。
  • 内部请求无效:后端/keycloak_code接口里调用/set接口,属于后端服务自身发起的内部请求,Cookie是设置给这个内部请求的响应,和用户浏览器完全无关,自然不会在浏览器中创建Cookie。

修复方案

方案1:直接在/keycloak_code响应中设置Cookie

无需额外调用/set接口,直接在处理keycloak_code的接口里,给返回给浏览器的响应设置Cookie:

# 后端代码修改
@app.get("/keycloak_code")
def get_tokens(response: Response, data: dict):
    code = data['code']
    print(code)
    # 直接在此处为浏览器响应设置Cookie
    response.set_cookie(key='tokic3', value='helloworld', httponly=True)
    return True

方案2:前端让浏览器直接发起请求

前端不要用requests转发请求,而是返回HTML页面,让浏览器直接请求后端接口:

# 前端代码修改
@app.get('/')
async def homepage(request: Request, response_class=HTMLResponse):
    return HTMLResponse("""
        <script>
            // 浏览器直接发起请求到后端接口,携带凭证信息
            fetch('http://local.me.me:8002/set', {method: 'GET', credentials: 'include'})
                .then(() => alert('Cookie已设置'));
        </script>
        <p>正在设置Cookie...</p>
    """)

关键注意事项

  • 确保前后端主域名一致(local.me.me),端口差异不影响Cookie设置;若显式设置domain参数,需匹配主域名(如domain='.me.me')。
  • 跨端口请求时,前端JS请求需带上credentials: 'include',确保浏览器自动处理Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:05:26