【问题标题】:How do HTTP/2 and CNAME work together?HTTP/2 和 CNAME 如何协同工作?
【发布时间】:2016-03-12 11:17:58
【问题描述】:

我不知道具体怎么问,所以我试着举例说明。

我在example.com 上拥有这些资源,这是一个启用HTTP/2 的服务器:

//example.com/css/file.css
//example.com/js/file.js
//example.com/images/file.png

我想要的是通过指向域example.com 的别名域cdn.example2.com 加载其中一个文件。因此,HTML 中的实际资源应该如下所示:

//example.com/css/file.css
//cdn.example2.com/js/file.js   -> points to //example.com/js/file.js
//example.com/images/file.png

我的问题是:第二个示例中的所有资源是否应该由浏览器通过单个连接加载,因为它们将在没有别名域时加载?

感谢您的帮助。

【问题讨论】:

    标签: apache nginx dns cname http2


    【解决方案1】:

    如果别名解析为不同的 IP,则无法通过同一连接加载资源(如果我没记错的话,HTTP/2 称为“连接重用”)。这就是 CDN 的问题。

    但是为了您的安心和对 CDN 的欢欣鼓舞,连接重用是一件棘手的事情,即使您的所有域都解析为同一个 IP,您也可能没有它,就像您的问题中的情况一样。

    为了未来的证明,您可能需要确保您的网站具有证书扩展 configured correctly 以启用连接重用。

    在当前版本的 Firefox 和 Chrome 中,我没有观察到连接重用,即使在精心制作证书之后,当然还要确保两个域指向同一个 IP。

    还有一些值得思考的东西:基于 TLS 的 HTTP/2 requires SNI,仅在打开连接时才会发生。因此,当您第一次连接到一个域(例如 example.com)时,服务器会获取 SNI 数据。但是如果重复使用相同的连接向 cdn.example.com 发送请求,服务器将不会获取此类数据。一些服务器或使用场景可能对这种不对称很敏感,这可能与浏览器实现(或不)连接重用的方式有关。但这些只是你的猜测,真的......

    【讨论】:

    • 我的示例中的别名将始终解析为相同的 IP。他们不会吗?
    • 我得到的是技术上是可能的,但目前还没有实现。我说的对吗?
    • 是的,这就是我的意思:到目前为止,我还没有看到浏览器支持。但也许 Safari 或 IE 有。
    【解决方案2】:

    该规范不要求其重用,但它确实明确包含有关何时可接受重用的信息 - 例如解析到相同 IP 地址的两台主机。

    https://www.rfc-editor.org/rfc/rfc7540#section-9.1.1

    直接或
    与源服务器建立的连接 通过使用 CONNECT 方法(第 8.3 节)创建的隧道,可能
    可重复用于具有多个不同 URI 权限的请求
    成分。一个连接可以被重用,只要源服务器
    是权威的(第 10.1 节)。对于没有 TLS 的 TCP 连接,
    这取决于解析到相同 IP 地址的主机。

    对于“https”资源,连接重用还取决于
    具有对 URI 中的主机有效的证书。
    服务器提供的证书必须满足
    客户端将在为主机建立新的 TLS 连接时执行
    在 URI 中。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2021-12-09
      • 2019-04-21
      • 2014-08-05
      • 2020-01-14
      • 2012-12-21
      • 2013-01-19
      • 2018-07-08
      • 2012-11-30
      相关资源
      最近更新 更多