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

Azure隔离函数关联静态Web应用部署后响应Cookie未发送至客户端

问题根因

该问题和CORS配置无关,核心原因是Azure静态Web应用的内置Functions不直接对外提供服务,所有请求/响应都会经过平台前置的反向代理层,代理层默认会剥离不符合平台安全规则的Set-Cookie响应头。本地调试时请求直接打在Functions运行时上,没有经过代理校验,因此不会出现Cookie丢失的现象。

具体触发问题的配置点如下:

  • 缺少Secure属性:SWA生产环境全链路强制HTTPS,反向代理要求所有SameSite值为Strict/Lax的Cookie必须携带Secure标记,当前代码未配置该属性,Cookie会被代理直接丢弃。
  • 冗余CORS配置冲突:SWA内置Functions和静态资源属于同源部署,平台代理会自动处理跨域头,单独在Functions站点配置的CORS规则会导致响应头重复,间接干扰Cookie的正常透传,建议直接删除这部分配置。
  • 现有代码中设置的Path="/"、HttpOnly=true、SameSite=Strict、过期时间配置均符合规则,不需要调整。
修正后的代码实现

给Cookie补上缺失的Secure属性即可,其余逻辑保持不变:

{
    HttpCookie cookie = new HttpCookie("serialno", "121345678");                    
    cookie.Expires = DateTime.UtcNow.AddMonths(6);
    cookie.SameSite = SameSite.Strict;
    cookie.Secure = true; // 生产HTTPS环境必填,否则SWA代理会直接剥离Cookie
    cookie.Path = "/";
    cookie.HttpOnly = true;
    HttpResponseData response = JsonResponseObject(req, loginResponse);
    response.Cookies.Append(cookie);
    return response;
}

internal static HttpResponseData JsonResponseObject(HttpRequestData req, object data)
{
    var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "application/json; charset=utf-8");
    response.Body = ObjectToStream(data);
    return response;
}
验证步骤

部署更新后的代码后,通过浏览器开发者工具的网络面板检查对应API请求的响应:

  1. 确认响应头中存在完整的Set-Cookie字段,属性包含secure标记
  2. 确认应用面板的Cookie存储区已经写入对应serialno字段

补充说明:如果需要本地复现线上代理的校验逻辑,可使用静态Web应用官方CLI启动本地模拟环境,避免直连Functions调试带来的环境差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:54:28