You need to enable JavaScript to run this app. .NET 5 gRPC服务本地IIS运行正常,远程调用提示不支持HTTP/1.1协议
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 gRPC服务本地IIS运行正常,远程调用提示不支持HTTP/1.1协议

问题核心根因

你遇到的Grpc.Core.RpcException、HResult值0x80131500本质是远程部署环境下gRPC服务的传输协议协商失败,最终以HTTP/1.1完成请求交互,而gRPC框架仅支持基于HTTP/2的传输协议,因此触发协议不匹配校验拦截。
本地运行正常的核心原因是本地调试时服务默认由Kestrel直接托管,默认启用HTTP/2支持,和IIS托管的运行机制存在本质差异,不能直接复用本地配置的判断逻辑。

排查与修复步骤
  • 校验远程服务器的IIS版本适配能力
    • 确认服务器系统为Windows Server 2016及以上、IIS版本为10.0及以上:更低版本的系统/IIS原生不支持HTTP/2 over TLS,本身就无法承载IIS托管的gRPC服务
    • 确认IIS的TLS配置:在服务器的SSL配置中禁用TLS 1.0、TLS 1.1旧版本,确保TLS 1.2及以上的加密套件正常启用,同时验证TLS握手过程中启用ALPN(应用层协议协商)扩展——ALPN是TLS阶段自动协商HTTP/2协议的核心依赖,没有ALPN支持时,握手过程会直接降级选择HTTP/1.1
  • 排查链路中间的代理层协议截断
    • 如果远程服务入口之前挂载了云负载均衡、ARR反向代理、Nginx等中间转发组件,必须确认这些组件的前后端链路都支持HTTP/2透传:很多代理默认是HTTP/1.1格式转发请求到后端IIS,相当于把原本的HTTP/2请求截断成了HTTP/1.1格式,这种场景下哪怕IIS本身支持HTTP/2也无济于事
    • 检查服务对应web.config的aspNetCore配置节点,确认没有强制指定HTTP/1.1请求处理模式的参数,正确的托管配置会自动启用对HTTP/2的支持
  • 校验客户端调用配置
    • 确认客户端代码没有强制指定HTTP/1.1的传输配置:比如使用Grpc.Net.Client时,没有误设置强制走HTTP/1.1的AppContext开关
    • 确认远程调用的目标地址没有经过会剥离HTTP/2标识的CDN节点
修复验证方法
  • 在远程服务器本地直接访问gRPC服务的健康检查端点,查看响应头的协议标识,确认IIS返回的响应使用的是HTTP/2版本而非HTTP/1.1
  • 抓取TLS握手阶段的网络包,确认客户端和服务器在ALPN协商环节选定的应用层协议为h2(对应HTTP/2),而非http/1.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 19:15:04