服务器使用 IAP 在 Cloud Run 上发送事件

问题描述 投票:0回答:1

我已将 NodeJS API 部署到 IAP 后面的 Cloud Run 进行身份验证。我正在尝试将 SSE 发送到客户端,但它们都在缓冲,直到达到最大缓冲区长度或事件完成,然后再发送。

它在本地工作,事件立即发送。在部署的环境中,我可以看到 Cloud Run 日志显示 API 正在立即触发写入,但它们直到稍后才会批量到达。

我认为它与标头剥离或 GFE 或 IAP 中的某些内容有关,但我似乎无法立即发送事件。我添加了

"X-Accel-Buffering": "no"
但这没有帮助。

编辑 - Cloud Run HTTP/2 已禁用,因为它当前与 IAP 一起使用时会无限循环。我在文档中找不到任何内容表明 Cloud Run 需要 HTTP/2 用于 SSE。

这是部署线:

gcloud run deploy api-XXXX 
--quiet 
--image us-east4-docker.pkg.dev/hq-xxxxx/XXXX 
--update-env-vars NODE_CONFIG_ENV=develop 
--update-labels managed-by=github-actions,commit-sha=XXX 
--platform managed 
--format json 
--region us-east4 
--project XXXX
--no-cpu-throttling

API 返回的当前标头 - 我想我已经尝试了很多。

"Content-Type": "text/event-stream; charset=UTF-8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"X-Accel-Buffering": "no",
google-cloud-platform google-cloud-run server-sent-events google-iap
1个回答
0
投票

大多数框架中 POST 的默认状态代码是 201。如果您提交正文并期望 SSE 响应,则应将状态代码修改为 200。 如果状态不是 200,Google Cloud Run 将缓冲整个响应。

总而言之:发送

text/event-stream
/ 服务器发送事件时,确保您的“成功”响应代码始终为 200。

© www.soinside.com 2019 - 2024. All rights reserved.