我们从几个子域/第三方加载数据。这会导致每个域大约100毫秒的SSL握手。我想知道是否有一种类似于dns-prefetching工作方式的“预取握手”方法。 dns-prefetching已经这样做了吗?
答案 0 :(得分:3)
我怀疑是否存在预取握手,我怀疑它是否有意义。对页面中的链接进行DNS预取,以便当用户决定单击链接时,浏览器已经知道目标主机的IP地址。这可能是在加载页面后,几分钟后,几小时后或从不。 DNS预取也不会绑定服务器上的任何资源。它只是通过询问上游DNS解析器来预热本地DNS缓存,该解析器可能已经拥有该记录,或者将解析该查询,从而在缓存中具有该条目,也可用于其他客户端。
与此相反,HTTPS的预取握手需要直接创建到目标服务器的TCP连接,进行SSL握手,然后等待客户端点击。这会占用客户端和服务器上的资源,因此在一段时间不活动后,服务器将关闭连接以释放这些资源。因此,在许多情况下,这只会浪费双方的资源,因为链接永远不会被点击,或者只有在服务器已经关闭空闲连接后才会被点击。
如果链接指向具有已存在连接的站点,例如从某个站点加载页面时的同站点链接,则情况会有所不同。今天,浏览器使用持久性HTTP连接,并尝试将连接保持打开一段时间,以防需要发送更多请求。如果用户然后单击同一站点链接,则可能使用现有连接,该连接仍然可以从先前的请求打开。当然,这些连接也会占用服务器上的资源,因此服务器也会在一些空闲时间后关闭连接。