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

Angular客户端如何获取后端返回的response.context信息?

Falcon的response.context是框架内部用于中间件或扩展的上下文数据,不会自动随HTTP响应发送给客户端。要把数据大小传递给前端,你需要修改后端代码,把size放到HTTP响应头里,然后前端通过fetch的响应对象读取这个头。

后端修改(Python/Falcon)

在你的响应逻辑里,添加一行把size写入自定义响应头(比如X-Content-Size),同时可以优化重复调用save_to_bytes()的问题:

gltf = create_gltf(vertices, trig_faces, uv)
data = b"".join(gltf.save_to_bytes())
data_size = {"size": len(data)}
log.info(f"Length of the content is  {len(data)}")
response.content_type = MEDIA_GLTF
# 新增:把size写入自定义响应头
response.set_header('X-Content-Size', str(data_size['size']))
# 复用已生成的data,避免重复序列化
response.data = data
response.status = falcon.HTTP_200

注:也可以直接使用标准的Content-Length头,不过自定义头更明确你传递的是业务数据大小。

客户端修改(Angular/fetch)

在fetch的回调流程中,先读取响应头里的size,再获取二进制数据,最后把两者一起传入Observable:

const data$ = new Observable(observer => {
    fetch(targetUrl.toString(), { method: 'GET' })
        .then(response => {
            // 读取响应头中的size,转成数字类型
            const contentSize = parseInt(response.headers.get('X-Content-Size') || '0', 10);
            // 同时获取二进制数据和size
            return response.arrayBuffer().then(gltfBuffer => ({ gltfBuffer, contentSize }));
        })
        .then(({ gltfBuffer, contentSize }) => {
            observer.next({ gltfBuffer, contentSize });
            observer.complete();
        })
        .catch(err => observer.error(err));
});

let result = data$.pipe(
    map(({ gltfBuffer, contentSize }) => {
        let gltfObject: any = {
            'componentId': componentId,
            'gltfBytes': gltfBuffer,
            'contentSize': contentSize  // 保存获取到的size信息
        };
        this.surfaceMeshesGltf.set(surfaceMeshKey, gltfObject);
    })
);
return result;

注:你之前在fetch的headers里配置responseType是错误的——这是Axios的配置项,fetch中直接调用response.arrayBuffer()即可获取二进制数据。

跨域场景补充

如果你的前端和后端处于跨域环境,需要确保Falcon服务器允许前端读取自定义头X-Content-Size。可以通过CORS中间件配置:

from falcon_cors import CORS

cors = CORS(
    allow_all_origins=True,
    expose_headers=['X-Content-Size']  # 关键:暴露自定义头给前端
)

# 将CORS中间件添加到Falcon应用
app = falcon.App(middleware=[cors.middleware])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:05:28