Ios Safari won';t通过http/2加载一些资源

Ios Safari won';t通过http/2加载一些资源,ios,https,safari,network-protocols,http2,Ios,Https,Safari,Network Protocols,Http2,服务器上启用了Http/2,昨天我注意到在Iphone(IOS 10.2)上没有加载某些资源,出现错误:加载资源失败:无法连接到服务器。当我将Iphone连接到Mac时,控制台中并没有错误,只是一些请求的结果直接导致了该错误。有趣的是,未加载的资源是实域的子域(正确的是CNAME)。该站点位于https上。 服务器是Windows Server 2016 编辑: 我们解决了这个子域问题,但是仍然有来自同一个域的请求没有响应 我知道IOS>9.3在通过https加载资源时支持http/2,但不工作

服务器上启用了Http/2,昨天我注意到在Iphone(IOS 10.2)上没有加载某些资源,出现错误:
加载资源失败:无法连接到服务器
。当我将Iphone连接到Mac时,控制台中并没有错误,只是一些请求的结果直接导致了该错误。有趣的是,未加载的资源是实域的子域(正确的是CNAME)。该站点位于https上。 服务器是Windows Server 2016

编辑: 我们解决了这个子域问题,但是仍然有来自同一个域的请求没有响应

我知道IOS>9.3在通过https加载资源时支持http/2,但不工作的资源不属于该域可能有助于解决此问题,但我不知道如何解决

我知道问题可能与http/2协议有关,因为我的android原生应用程序也停止工作,出现错误:
java.io.IOException:stream被重置:protocol\u error
。我通过强制应用程序使用http/1解决了这个问题。现在起作用了。但如何解决iphone safari的问题呢


我使用ASP.NET Web表单作为后端(从我使用的ASP.NET 4.6开始,它就支持http2)。

似乎已经找到了解决方案。经过几天的调查,禁用动态内容压缩有所帮助


上面Vlado Pandžić已经正确地给出了答案。 我不能评论,因为我是这个网站的新手,但我想添加一些我发现的东西

版本11以下的IOS不支持HTTP/2。但是如果页面太大和压缩,它将被卡住。我不确定截止点是什么,但是如果你打开一个有动态压缩(Gzip或其他什么)的小页面,它会工作得很好。ASP或PHP等,没有关系。一旦页面达到压缩数据大小,需要多次往返才能提取数据,那么Safari就会陷入困境

它将进入一个无休止的循环,用请求敲打您的服务器。我看到成千上万的页面点击,而Safari只是停留在一个空白的白色屏幕上

对我来说,问题是在你的整个网站上禁用动态压缩将导致谷歌对移动友好性的惩罚。谷歌希望你有压缩功能,但你必须为Safari禁用它,这太糟糕了

我的解决方案是在整个网站上启用动态压缩,但我使用web.config文件来禁用特定页面的动态压缩,我知道这些页面的大小可能相当大


祝你好运


Matt

您还可以禁用gZip并使用brotli代替压缩,较早版本的Safari不支持它,因此它似乎可以工作


你遇到了一个有趣的问题。PS:格式化。您的SSL证书是仅为real domain颁发的,还是为子域颁发的通配符证书?是的,并且适用于子域,但我最近注意到real domain(非子域)中的某些页面没有加载。若我打开的页面在Chrome或Firefox中不起作用,我会得到响应(尽管是http 1.1)。在Chrome上的Mac上工作的页面也可以工作并返回http2响应。我的网站上可能有什么东西阻止返回http2响应?或者,IIS可能存在无法降级相同页面请求的问题?我们尝试在有问题的ASP.NET WebForms页面上添加EnableViewState=“false”来禁用viewstate,在某些情况下似乎有所帮助(某些页面正在打开),但仍然没有最终的解决办法…问题是,你必须为整个网站这样做,然后被谷歌惩罚为不“移动友好”。
<location path="large-page.aspx">
    <system.webServer>
        <urlCompression doDynamicCompression="false" />
    </system.webServer>
</location>