Safari无法通过http/2加载某些资源

14

服务器启用了Http/2,昨天我注意到在iPhone (IOS 10.2)上加载某些资源时出现错误:无法加载资源:无法连接到服务器。当我将iPhone连接到Mac时,控制台中没有错误,但是某些请求的结果会立即导致该错误。有趣的事情可能是未加载的资源是真实域名的子域(CNAME正确)。网站使用https协议。

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

我知道IOS > 9.3支持通过https加载资源时使用http/2,但是那些无法正常工作的资源并不属于该域名,这可能有助于解决此问题,但我不知道怎么做。

我知道可能的问题与http/2协议有关,因为我的Android原生应用程序也停止工作,并显示错误:java.io.IOException:流被重置:PROTOCOL_ERROR。我通过强制我的应用程序使用http/1来解决了这个问题。现在可以正常工作了。但如何解决iPhone Safari的问题呢?

我正在使用ASP.NET Web Forms作为后端(它支持http2,因为我正在使用ASP.NET 4.6)。


你遇到了一个有趣的问题。PS:格式化。 - Feathercrown
你的SSL证书是仅针对真实域名发行的,还是通配符证书也适用于子域名? - Michał Myśliwiec
是的,它适用于子域,但我最近注意到一些真实域中的页面(而不是子域)无法加载。如果我在Chrome或Firefox中打开不工作的页面,我会得到响应(尽管是http 1.1)响应。在Mac上使用Chrome工作的页面也可以返回http2响应。我的网站上是否有什么东西阻止了返回http2响应?或者IIS存在问题,无法降级同一页面的请求? - Vlado Pandžić
我们尝试在有问题的ASP.NET WebForms页面顶部添加EnableViewState="false"来禁用视图状态,这似乎在某些情况下有所帮助(一些页面现在可以打开),但仍然没有最终解决方案... - Vlado Pandžić
4个回答

1

答案已经由Vlado Pandžić在上面正确提供了。由于我是这个网站的新用户,所以无法发表评论,但我想补充一些我发现的内容。

iOS低于11版本支持HTTP/2。但是!如果页面太大且被压缩,它将会卡住。我不确定截止点是什么,但如果打开一个具有动态压缩(Gzip或其他)的小页面,它就可以正常工作。ASP或PHP等都没有关系。一旦页面达到需要多次往返拉取数据的压缩数据大小,那么Safari就会陷入困境。

它会进入无尽循环,用请求攻击您的服务器。当Safari卡在一个空白屏幕上时,我看到了成千上万的页面点击。

对我来说,问题在于禁用整个网站的动态压缩将导致Google对移动友好性的惩罚。Google希望您进行压缩,但您必须为Safari禁用它,这很糟糕。

我的解决方案是启用整个网站的动态压缩,但我使用web.config文件禁用了我知道可能非常大的特定页面的压缩。

<location path="large-page.aspx">
    <system.webServer>
        <urlCompression doDynamicCompression="false" />
    </system.webServer>
</location>

祝你好运!

Matt


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

enter image description here


问题在于你必须为整个网站进行此操作,然后被谷歌惩罚,因为它不符合“移动友好”的标准。 - Matt Deemer

0

0

这是一个相当古老的帖子,然而,如果你不想割掉旧的iOS设备,有一个更好的答案,那就是禁用所有压缩,无论是对于这个网站(接受的答案)还是对于给定资源的所有浏览器(Matt Deemer)。

URL重写规则可以仅针对重要的资源和浏览器禁用压缩。

最近,我想将一个已经建立起来的Classic ASP网站迁移到HTTP/2,该网站可以提供大型、动态创建的资源。

以下规则允许除了旧的WebKit版本之外的所有人获取压缩内容。

    <rule name="No compression for old WebKit">
          <match url="^(.+\.asp.*)" />
          <conditions>
              <add input="{HTTP_USER_AGENT}" pattern="AppleWebKit\/60[0-3]" />
          </conditions>
          <serverVariables>
              <set name="HTTP_ACCEPT_ENCODING" value="none" />
          </serverVariables>
          <action type="Rewrite" url="{R:1}" />
    </rule>

注意:WebKit/604及以上版本不会出现http/2压缩问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接