我不知道如何问它,所以我会尝试用一个例子来解释。
我在example.com
上启用了这些资源,HTTP/2
启用了服务器:
//example.com/css/file.css
//example.com/js/file.js
//example.com/images/file.png
我想要的是通过指向域cdn.example2.com
的别名域example.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
我的问题是:第二个示例中的所有资源都应由浏览器通过单个连接加载,因为当没有别名域时它们会被加载吗?
感谢您的帮助。
答案 0 :(得分:4)
如果别名解析为不同的IP,则无法通过同一连接加载资源(称为"连接重用" HTTP / 2,如果我没有弄错的话)。这是CDN的问题。
但是为了让您高枕无忧并且完全为CDN欢欣鼓舞,连接重用是一件棘手的事情,即使你所有的域都解析为同一个IP,你也可能没有它,就像你问题中的情况一样。
为了将来证明,您可能希望确保您的网站具有证书扩展名configured correctly以启用连接重用。
在当前版本的Firefox和Chrome中,我还没有观察到连接的重复使用,即使在制作完全谨慎的证书之后,当然也确保这两个域指向相同的IP。
只是思考的一些食物:TLS requires SNI上的HTTP / 2,只有在打开连接时才会发生。因此,当您第一次连接到一个域(例如example.com)时,服务器将获取SNI数据。但是,如果重新使用相同的连接向cdn.example.com发送请求,服务器将无法获得此类数据。某些服务器或使用场景可能对此不对称性很敏感,这可能与浏览器实现(或不重用)连接重用的方式有关。但这些只是你真正猜测的......
答案 1 :(得分:4)
规范并不要求重用,但它明确包含有关何时可以接受重用的信息 - 例如两个解析为相同IP地址的主机。
https://tools.ietf.org/html/rfc7540#section-9.1.1
直接或直接与原始服务器建立的连接 通过使用CONNECT方法创建的隧道(第8.3节),5月 被重用于具有多个不同URI权限的请求
组件。只要原始服务器
,就可以重用连接 是权威的(第10.1节)。对于没有TLS的TCP连接,
这取决于主机已解析为相同的IP地址。对于" https"资源,连接重用还取决于 拥有对URI中的主机有效的证书。该
服务器提供的证书必须满足任何检查 客户端在为主机形成新的TLS连接时执行 在URI中。