GCP Cloud Run部署前后端后,响应存在Cookie但浏览器未保存的问题求助
各位大佬好,我遇到了一个头疼的问题,想请教下大家。我把前后端分别部署在GCP Cloud Run的两个独立服务上,现在登录请求能正常返回200,响应头里也能看到Set-Cookie字段,但浏览器的Application > Storage > Cookies里就是看不到这个Cookie,本地开发和Postman测试都完全正常,只有Cloud Run部署后出问题。
后端(Express.js)相关代码
CORS中间件配置:
app.use(cookieParser()) app.all('*', function (req, res, next) { res.header("Access-Control-Allow-Origin", process.env.FRONTEND); res.header("Access-Control-Allow-Credentials", true); res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, x-csrf-token"); next() });
设置Cookie的核心代码:
try { const oneHourFromNow = new Date(Date.now() + 3600000) const Admins = await Admin.find({ password: req.body.password, name: req.body.name }).select("-password").select("-token").select("-_id"); if (Admins.length > 0) { res.cookie("admin-cookie", "123", { httpOnly: false, secure: true, // sameSite: "none", expires: oneHourFromNow, domain: process.env.DOMAIN, path: "/", }); res.status(200).send("Cookie set") } } catch(err) { // 省略错误处理逻辑 }
前端(React + Axios)请求代码
const handleSubmit = async (event) => { console.log("state", username, password) event.preventDefault(); let data = JSON.stringify({ "name": username, "password": password }); let config = { method: 'post', maxBodyLength: Infinity, url: `${process.env.REACT_APP_BASE_URL}/client/login`, headers: { 'Content-Type': 'application/json', }, data: data, credential: 'include' }; axios.defaults.withCredentials = true; axios.request(config, { withCredentials: true }) .then((response) => { console.log("cookie response", response) if (response.status === 200) { console.log("success") // window.location.href = "/products"; } console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); };
当前现象细节
- 部署后登录请求返回200,Network面板的请求详情里能看到
Set-Cookie头,但Domain字段旁边有个感叹号(暂时找不到官方对这个感叹号的解释) - Application面板的Storage > Cookies目录下完全找不到这个Cookie
- 本地开发环境(前后端分端口跑在localhost)和Postman测试时,Cookie都能正常保存并读取
已经尝试过的排查动作
- 反复调整CORS政策的各种头配置
- 在Axios里以多种方式设置
withCredentials(全局默认设置、请求单独配置) - 加了大量console.log排查请求/响应的细节差异
- 反复对比本地和部署后的请求头、响应头内容
实在找不到问题所在了,有没有大佬遇到过类似的情况,或者能指点下排查方向?
备注:内容来源于stack exchange,提问作者Tianze Hua
相关产品推荐
相关产品推荐

