在服务器上启用了Http / 2,昨天我注意到在Iphone(IOS 10.2)上没有加载一些错误的资源:failed to load resource:connecting to server is not possible
。当我将Iphone连接到Mac时,控制台中没有错误,但只是因为某些请求导致错误导致错误。有趣的是,未加载的资源是真实域的子域(CNAME是正确的)。网站位于https上。
服务器是Windows Server 2016。
修改: 我们解决了这个子域问题,但仍有来自同一域的请求没有响应任何响应。
我知道IOS> 9.3当资源通过https加载时支持http / 2但是那些不工作的资源不属于该域的东西可以帮助解决这个问题,但我不知道如何。
我知道可能问题与http / 2协议有关,因为我的Android原生应用程序也停止了错误: java.io.IOException: stream was reset: PROTOCOL_ERROR
。我通过强制我的应用程序使用http / 1解决了这个问题。现在有效。但是如何解决iphone safari问题?
我正在使用ASP.NET Web Forms作为后端(从我使用的ASP.NET 4.6开始支持http2。)
答案 0 :(得分:1)
答案 1 :(得分:0)
VladoPandžić已在上面正确提供了答案。 我无法发表评论,因为我是这个网站的新手,但我想添加一些我找到的东西。
IOS低于版本11确实支持HTTP / 2。但!如果页面太大并且压缩,它将会卡住。我不确定截止是什么,但如果你打开一个有动态压缩的小页面(Gzip或其他),它将正常工作。 ASP或PHP等没关系。一旦页面达到压缩数据大小,需要多次往返才能获取数据,那么Safari会在一定程度上得到它的短裤。
它将真正进入一个无限循环,用请求锤击你的服务器。我看到成千上万的页面点击,而Safari只是卡在一个空白的白色屏幕上。
对我而言,问题在于,在整个网站上停用动态压缩会导致Google因移动设备而受到处罚。谷歌希望你有压缩功能,但你必须为Safari禁用它,这很糟糕。
我的解决方案是在整个网站上启用动态压缩,但我使用web.config文件为特定页面禁用它,我知道这些页面的大小非常大。
<location path="large-page.aspx">
<system.webServer>
<urlCompression doDynamicCompression="false" />
</system.webServer>
</location>
祝你好运!
马特
答案 2 :(得分:0)
您也可以禁用gZip并改为使用brotli进行压缩,较早版本的Safari不支持它,因此似乎可以正常工作。