Asp.net 响应。使用HTTP/2刷新

Asp.net 响应。使用HTTP/2刷新,asp.net,iis,safari,http2,Asp.net,Iis,Safari,Http2,背景 在macOS“El Capitan”v10.11或更高版本上运行的支持HTTP/2(即v9+)的Safari版本中,当通过HTTP/2(例如Windows Server 2016/Windows 10)访问IIS10提供的网页时,如果该网页包含“Response.Flush”,则不会加载该网页。它只是挂在一个白色的屏幕上。在这些情况下,Web服务器CPU使用率也会急剧上升 这表明当使用Response.Flush时,IIS会将协议从HTTP/2切换回HTTP/1.1。Safari无法处理这

背景

在macOS“El Capitan”v10.11或更高版本上运行的支持HTTP/2(即v9+)的Safari版本中,当通过HTTP/2(例如Windows Server 2016/Windows 10)访问IIS10提供的网页时,如果该网页包含“Response.Flush”,则不会加载该网页。它只是挂在一个白色的屏幕上。在这些情况下,Web服务器CPU使用率也会急剧上升

这表明当使用Response.Flush时,IIS会将协议从HTTP/2切换回HTTP/1.1。Safari无法处理这个问题,而所有其他浏览器似乎都可以

从上面的链接演示:

工作-

不工作-

我很感激这个问题的解决方案可能在其他地方(我目前有一个开放的webkit),所以我会尽量使我的问题集中

TL;DR

  • 在HTTP/2环境中使用Response.Flush还有意义吗

  • IIS“降级”到HTTP/1.1是否是此场景中的预期行为?若然,原因为何


  • 我从chrome 57.0.2987.110访问了工作url和非工作url来测试行为,正如上面解释的,当使用Response.Flush IIS时,我得到了两者的http 1.1?这似乎是意料之中的。Safari似乎无法处理此问题。HTTP/2协议切换从发送到IIS服务器的升级头开始,IIS对此没有太多控制权,因为这是在HTTP.sys层处理的。由于问题似乎与Safari有关,因此我们可以从服务器端解决问题,以避免我希望的问题。在应用程序调用Response.Flush之前,我们可以通过检查服务器变量server_协议来检查浏览器用户代理、OS(HTTP_user_代理)和HTTP版本,然后避免调用Response.Flush我们在Firefox中遇到了完全相同的问题。更糟糕的是,response.flush错误发生在POST请求之后,因此我们得到了一个双重回发,这是IMHO永远不会发生的。我们正在为此应用程序禁用HTTP/2。@LeandroBarone:您是如何为您的应用程序禁用HTTP/2的?我得到了完全相同的问题。