企业防火墙/代理后面的 Firestore / gRPC

2023-11-27

我们公司已经使用 Firestore 构建了一个电子应用程序,现在我们正在尝试将该应用程序部署在公司代理和防火墙(客户环境)后面。使用电子设置代理身份验证设置后app.on('login')应用程序中的所有网络请求均成功,Firestore 连接除外。

我们收到以下错误:

[2018-09-21T09:09:13.556Z]  @firebase/firestore: Firestore (5.5.0) [Connection]: GRPC stream error. Code: 14 Message: 14 UNAVAILABLE: Connect Failed
[2018-09-21T09:09:13.557Z]  @firebase/firestore: Firestore (5.5.0) [PersistentStream]: close with error: FirebaseError: [code=unavailable]: 14 UNAVAILABLE: Connect Failed
[2018-09-21T09:09:13.557Z]  @firebase/firestore: Firestore (5.5.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: 14 UNAVAILABLE: Connect Failed
This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.

我们还尝试调试 Firestore 使用的 gRPC,日志输出如下:

I0921 11:39:18.014000000  8920 src/core/ext/filters/client_channel/lb_policy/subchannel_list.h:292] [pick_first 138D9818] subchannel list 08E19208 index 7 of 11 (subchannel 138B9138): starting watch: requesting connectivity change notification (from IDLE)
I0921 11:39:18.016000000  8920 connectivity_state.cc:116] CONWATCH: 138B91A8 subchannel: from IDLE [cur=IDLE] notify=08F0B0C4
I0921 11:39:18.016000000  8920 connectivity_state.cc:164] SET: 138B91A8 subchannel: IDLE --> CONNECTING [state_change] error=00000000 "No Error"
I0921 11:39:18.018000000  8920 connectivity_state.cc:190] NOTIFY: 138B91A8 subchannel: 08F0B0C4
I0921 11:39:18.019000000  8920 tcp_client_custom.cc:139] CLIENT_CONNECT: 134C5B98 ipv4:172.217.16.202:443: asynchronously connecting
I0921 11:39:18.020000000  8920 src/core/ext/filters/client_channel/lb_policy/subchannel_list.h:404] [pick_first 138D9818] subchannel list 08E19208 index 7 of 11 (subchannel 138B9138): connectivity changed: state=CONNECTING, error="No Error", shutting_down=0
I0921 11:39:18.021000000  8920 connectivity_state.cc:164] SET: 138D9848 pick_first: CONNECTING --> CONNECTING [connecting_changed] error=00000000 "No Error"
I0921 11:39:18.021000000  8920 src/core/ext/filters/client_channel/lb_policy/subchannel_list.h:313] [pick_first 138D9818] subchannel list 08E19208 index 7 of 11 (subchannel 138B9138): renewing watch: requesting connectivity change notification (from CONNECTING)
I0921 11:39:18.026000000  8920 connectivity_state.cc:116] CONWATCH: 138B91A8 subchannel: from CONNECTING [cur=CONNECTING] notify=08F0B0C4
I0921 11:39:18.027000000  8920 completion_queue.cc:851] grpc_completion_queue_next(cq=08DED7E0, deadline=gpr_timespec { tv_sec: -9223372036854775808, tv_nsec: 0, clock_type: 0 }, reserved=00000000)
I0921 11:39:18.028000000  8920 completion_queue.cc:951] RETURN_EVENT[08DED7E0]: QUEUE_TIMEOUT
I0921 11:39:18.030000000  8920 tcp_custom.cc:348] Creating TCP endpoint 134C5B98
I0921 11:39:18.030000000  8920 tcp_client_custom.cc:69] CLIENT_CONNECT: ipv4:172.217.16.202:443: on_alarm: error="Cancelled"
I0921 11:39:18.030000000  8920 handshaker.cc:141] handshake_manager 034B6840: adding handshaker http_connect [137A6430] at index 0
I0921 11:39:18.030000000  8920 ssl_transport_security.cc:211]      HANDSHAKE START -       TLS client start_connect  - !!!!!!
I0921 11:39:18.030000000  8920 ssl_transport_security.cc:211]                 LOOP -    TLS client enter_early_data  - !!!!!!
I0921 11:39:18.030000000  8920 ssl_transport_security.cc:211]                 LOOP -   TLS client read_server_hello  - !!!!!!
I0921 11:39:18.031000000  8920 handshaker.cc:141] handshake_manager 034B6840: adding handshaker security [08F078C8] at index 1
I0921 11:39:18.031000000  8920 handshaker.cc:212] handshake_manager 034B6840: error="No Error" shutdown=0 index=0, args={endpoint=13454A30, args=08E1AC60 {size=8: grpc.primary_user_agent=grpc-node/1.13.1, grpc.client_channel_factory=58CBB994, grpc.channel_credentials=134C5318, grpc.server_uri=dns:///firestore.googleapis.com, grpc.default_authority=firestore.googleapis.com, grpc.http2_scheme=https,
 grpc.security_connector=08EDF460, grpc.subchannel_address=ipv4:172.217.16.202:443}, read_buffer=08D55870 (length=0), exit_early=0}
I0921 11:39:18.031000000  8920 handshaker.cc:253] handshake_manager 034B6840: calling handshaker http_connect [137A6430] at index 0
I0921 11:39:18.031000000  8920 handshaker.cc:212] handshake_manager 034B6840: error="No Error" shutdown=0 index=1, args={endpoint=13454A30, args=08E1AC60 {size=8: grpc.primary_user_agent=grpc-node/1.13.1, grpc.client_channel_factory=58CBB994, grpc.channel_credentials=134C5318, grpc.server_uri=dns:///firestore.googleapis.com, grpc.default_authority=firestore.googleapis.com, grpc.http2_scheme=https,
 grpc.security_connector=08EDF460, grpc.subchannel_address=ipv4:172.217.16.202:443}, read_buffer=08D55870 (length=0), exit_early=0}
I0921 11:39:18.031000000  8920 handshaker.cc:253] handshake_manager 034B6840: calling handshaker security [08F078C8] at index 1
I0921 11:39:18.032000000  8920 tcp_custom.cc:234] WRITE 134C5B98 (peer=ipv4:172.217.16.202:443): 16 03 01 00 9f 01 00 00 9b 03 03 20 0d 33 b4 b9 36 9c bc b1 56 cf f9 8b 2c 96 35 7a 10 05 c7 42 8f 0b e8 f5 55 b9 5b d2 03 9e 40 00 00 08 c0 2b c0 2c c0 2f c0 30 01 00 00 6a ff 01 00 01 00 00 00 00 1d 00 1b 00 00 18 66 69 72 65 73 74 6f 72 65 2e 67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 00 17 00 00 00
23 00 00 00 0d 00 14 00 12 04 03 08 04 04 01 05 03 08 05 05 01 08 06 06 01 02 01 33 74 00 00 00 10 00 0e 00 0c 08 67 72 70 63 2d 65 78 70 02 68 32 00 0b 00 02 01 00 00 0a 00 04 00 02 00 17 '........... .3..6...V...,.5z...B....U.[...@....+.,./.0...j..............firestore.googleapis.com.....#..........................3t.........grpc-exp.h2..............'
I0921 11:39:18.033000000  8920 completion_queue.cc:851] grpc_completion_queue_next(cq=08DED7E0, deadline=gpr_timespec { tv_sec: -9223372036854775808, tv_nsec: 0, clock_type: 0 }, reserved=00000000)
I0921 11:39:18.044000000  8920 completion_queue.cc:951] RETURN_EVENT[08DED7E0]: QUEUE_TIMEOUT
I0921 11:39:18.046000000  8920 tcp_custom.cc:217] write complete on 134C5B98: error="No Error"
I0921 11:39:18.046000000  8920 resource_quota.cc:795] RQ anonymous_pool_8f00c70 ipv4:172.217.16.202:443: alloc 8192; free_pool -> -8192
I0921 11:39:18.046000000  8920 resource_quota.cc:292] RQ: check allocation for user 08DDBA00 shutdown=0 free_pool=-8192
I0921 11:39:18.047000000  8920 resource_quota.cc:318] RQ anonymous_pool_8f00c70 ipv4:172.217.16.202:443: grant alloc 8192 bytes; rq_free_pool -> 9223372036854767615
I0921 11:39:18.048000000  8920 tcp_custom.cc:174] TCP:134C5B98 read_allocation_done: "No Error"
I0921 11:39:18.048000000  8920 tcp_custom.cc:191] Initiating read on 134C5B98: error="No Error"
I0921 11:39:18.050000000  8920 completion_queue.cc:851] grpc_completion_queue_next(cq=08DED7E0, deadline=gpr_timespec { tv_sec: -9223372036854775808, tv_nsec: 0, clock_type: 0 }, reserved=00000000)
I0921 11:39:18.052000000  8920 completion_queue.cc:951] RETURN_EVENT[08DED7E0]: QUEUE_TIMEOUT
I0921 11:39:18.056000000  8920 resource_quota.cc:818] RQ anonymous_pool_8f00c70 ipv4:172.217.16.202:443: free 8192; free_pool -> 8192
I0921 11:39:18.057000000  8920 tcp_custom.cc:128] TCP:134C5B98 call_cb 08F079B8 58B7D4B0:08F078C8
I0921 11:39:18.064000000  8920 tcp_custom.cc:132] read: error={"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}
D0921 11:39:18.065000000  8920 security_handshaker.cc:129] Security handshake failed: {"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}
I0921 11:39:18.066000000  8920 tcp_custom.cc:286] TCP 134C5B98 shutdown why={"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}
I0921 11:39:18.067000000  8920 handshaker.cc:212] handshake_manager 034B6840: error={"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]} shut
down=0 index=2, args={endpoint=00000000, args=00000000 {size=0: (null)}, read_buffer=00000000 (length=0), exit_early=0}
I0921 11:39:18.069000000  8920 handshaker.cc:240] handshake_manager 034B6840: handshaking complete -- scheduling on_handshake_done with error={"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\
grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}
I0921 11:39:18.072000000  8920 connectivity_state.cc:164] SET: 138B91A8 subchannel: CONNECTING --> TRANSIENT_FAILURE [connect_failed] error=08E97DF8 {"created":"@1537522758.071000000","description":"Connect Failed","file":"..\deps\grpc\src\core\ext\filters\client_channel\subchannel.cc","file_line":641,"grpc_status":14,"referenced_errors":[{"created":"@1537522758.065000000","description":"Handshake
read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}]}
I0921 11:39:18.075000000  8920 connectivity_state.cc:190] NOTIFY: 138B91A8 subchannel: 08F0B0C4
I0921 11:39:18.076000000  8920 subchannel.cc:646] Connect failed: {"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}
I0921 11:39:18.076000000  8920 resource_quota.cc:508] RU shutdown 08DDBA00
I0921 11:39:18.078000000  8920 src/core/ext/filters/client_channel/lb_policy/subchannel_list.h:404] [pick_first 138D9818] subchannel list 08E19208 index 7 of 11 (subchannel 138B9138): connectivity changed: state=TRANSIENT_FAILURE, error={"created":"@1537522758.071000000","description":"Connect Failed","file":"..\deps\grpc\src\core\ext\filters\client_channel\subchannel.cc","file_line":641,"grpc_sta
tus":14,"referenced_errors":[{"created":"@1537522758.065000000","description":"Handshake read failed","file":"..\deps\grpc\src\core\lib\security\transport\security_handshaker.cc","file_line":321,"referenced_errors":[{"created":"@1537522758.056000000","description":"EOF","file":"..\deps\grpc\src\core\lib\iomgr\tcp_uv.cc","file_line":107}]}]}, shutting_down=0
I0921 11:39:18.079000000  8920 src/core/ext/filters/client_channel/lb_policy/subchannel_list.h:332] [pick_first 138D9818] subchannel list 08E19208 index 7 of 11 (subchannel 138B9138): stopping connectivity watch

如何解决这个连接问题?需要更改企业代理或防火墙中的哪些设置才能使 Firestore / gRPC 能够连接?


可以看出在源代码中,node.js 客户端库通过 gRPC 访问 Firestore,地址为firestore.googleapis.com在端口 443 上。

因此,为了让您的应用程序成功与 Firestore 配合使用,防火墙/代理必须允许访问firestore.googleapis.com通过 TCP 在端口 443 上。为什么这目前不起作用是防火墙/代理的当前配置的问题,很可能它在某些包罗万象的规则中默认被阻止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

企业防火墙/代理后面的 Firestore / gRPC 的相关文章

随机推荐

  • 绑定到数据表时如何设置 gridview 列宽

    我将一个表绑定到 asp net 中的 gridview grdIssues DataSource mdtIssues grdIssues DataBind 问题是我无法控制列宽 asp net 似乎自己决定每列的宽度 方法如 grdIss
  • 如何使用Golang编写原始TCP数据包(使用gopacket)并通过原始套接字发送

    我想使用 gopacket 制作自定义 TCP 数据包 然后 使用原始套接字发送它们 这是一个简短易读的 go 程序示例 演示了我想做的事情 package main import code google com p gopacket co
  • RecyclerView 滑动即可关闭 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我曾经滑动关闭库 但现在我正在尝试迁移到 RecyclerView 事情并不那么明显 你知道这个库有什么替代品吗 有什么想法如何从头开始实施吗 从
  • BoxDecoration 中的 FadeInImage

    我喜欢淡入图像 我可以做这个 child FadeInImage assetNetwork image https placeimg com 640 480 any placeholder assets images loading gif
  • 如何点击量角器中的隐藏元素?

    我有一个元素 只有当我将鼠标悬停在它上面时才可见 我编写了以下代码将鼠标悬停在面板上 以便该元素可见 ptor actions mouseMove ptor findElement protractor By xpath id produc
  • 安卓、摇篮。如何构建应用程序并从测试应用程序运行测试

    我里面有 android 项目和 android 测试项目 位于文件夹测试下 这些项目的结构类似于 eclipse src res 库 测试 我用的是gradle 我想要的只是构建应用程序 运行单元测试并获取它们的报告 但我不明白如何正确地
  • MATLAB parfor 中的版本或字节顺序错误?

    我正在使用 MATLAB 进行并行计算parfor 代码结构看起来很像 assess fitness save communication overheads bitmaps pop 1 new indi idices porosities
  • python list.pop() 修改原始列表(不仅仅是复制)

    情况 制作原始列表的副本后 我使用 pop 修改所述副本 事实证明 原始列表受到了更改的影响 我什至在检查原始列表和副本不是同一对象后 弹出副本的元素将弹出原始列表中的相同元素 请参阅下面的脚本示例 在此先感谢您的帮助 l 1412898
  • jQuery Mobile 固定页脚在键盘出现时移动

    我使用 Phonegap 和 jQuery Mobile 设计了一个应用程序 固定页脚可以正常工作 直到我单击下拉列表或文本字段 这会导致页脚从视图中消失 Android 4 0 或移动到视图中间 Android 2 2 Galaxy Ta
  • npm 将所有模块安装在 /usr/local/lib/node_modules/ 中

    我在 Ubuntu 12 10 上安装了 node js 0 8 14 我在主目录中创建了一个带有子目录的目录node modules 我想在那里安装一些本地节点模块但正在运行 npm install myModule 在此目录中安装此模块
  • 在 PHP 中如何检查类是否存在?

    所以我在主类中有这种结构函数 function construct this gt conf GLOBALS conf this gt dbi new dbinfo this gt modOpt new modOptions this gt
  • HTTP_HOST 的可靠性如何?

    我编写了一个 PHP 脚本 我想在同一服务器上的多个域上使用该脚本 指向相同的脚本 我想向脚本添加功能 以便我可以随时找出脚本正在使用的域 HTTP HOST 可用于查找域 但是 我读到它不可靠 尤其是对于较旧的浏览器 我的理解是大多数 A
  • 检查应用程序是否在测试环境中运行

    只是想知道我是否可以确定我的应用程序当前是否在测试环境中运行 原因是我正在运行自动屏幕截图 并且只想在运行该 UI 测试时隐藏 修改我的应用程序的部分内容 例如 我想跳过注册推送通知以避免在启动时出现 iOS 弹出窗口 我正在寻找类似的东西
  • java中引用变量的大小是多少[重复]

    这个问题在这里已经有答案了 java中引用变量的大小是多少 我很确定它不会依赖于架构 是吗 它与 C 中的指针概念有相似之处吗 我尝试过 但无法得到任何令人信服的答案 引用使用的内存量取决于几个参数 在 32 位 JVM 上 它将是 32
  • python 中的绝对导入不起作用,相对导入起作用

    我似乎无法在 python 中使用绝对导入 这是我的文件结构 a b init py init py foo py foo py Including or removing the future import has no effect f
  • 地理位置在 Windows 7/XP 上的 Safari 5.x 上不起作用

    我正在开发一个使用 W3C 标准地理定位 API 的应用程序 但我一生都无法让它在我的 Windows 7 和 XP PC 上的 Safari 上运行 它在我的 iPad 和 iPhone 上运行良好 它还可以在 Chrome 5 6 7
  • Swift 对象引用数组?

    我可能错过了有关 swift 的重要信息 我有一个包含键 快速数组对的地图 我更改了数组 但地图内的数组没有更改 有人可以解释一下发生了什么事吗 谢谢 var map String String var list String map li
  • 在 pandas 数据框中查找元素

    我有一个 pandas 数据框 如下所示 0 1 0 2 2 3 1 4 我想要做的是 如果我得到 2 作为输入 我的代码应该在数据框中搜索 2 当找到时 它返回另一列的值 在上面的示例中 我的代码将返回 0 和 3 我知道我可以简单地查看
  • 限制输入为数字和 。在输入字段上

    继我问的另一个问题之后 我似乎真的没有取得任何进展 由于我的无能 我选择了这些人的答案 因为他回答了我的问题 我正在收集我没有问正确的问题 因为我不知道该怎么做 所以问题是我有输入元素 保持简单
  • 企业防火墙/代理后面的 Firestore / gRPC

    我们公司已经使用 Firestore 构建了一个电子应用程序 现在我们正在尝试将该应用程序部署在公司代理和防火墙 客户环境 后面 使用电子设置代理身份验证设置后app on login 应用程序中的所有网络请求均成功 Firestore 连