2017-08-25 42 views
2

我們從幾個子域/第三方加載數據。這會導致每個域大約100ms的SSL握手。我想知道是否有一種「預取握手」的方式,類似於dns-prefetching的工作方式。 dns-prefetching已經做到了嗎?是否存在與SSL握手相同的dns預取?

回答

2

我懷疑是否存在預取握手,我懷疑它是否合理。 DNS預取是爲頁面中的鏈接完成的,以便當用戶決定點擊鏈接時,瀏覽器已經知道目標主機的IP地址。這可能在加載頁面後立即發生,幾分鐘後,幾小時後或從未。 DNS預取也不綁定服務器上的任何資源。它只是通過詢問上游DNS解析器,它可能已經有記錄或將解析查詢並因此在高速緩存中具有條目,也可用於其他客戶端,從而使本地DNS高速緩存升溫。

與此相反,HTTPS的預取握手需要直接創建到目標服務器的TCP連接,執行SSL握手,然後等待客戶端進行單擊。這將客戶端和服務器上的資源綁定在一起,因此在一段時間不活動後,服務器將關閉連接以釋放這些資源。因此,在很多情況下,這隻會浪費雙方的資源,因爲鏈接永遠不會被點擊或只會在服務器關閉空閒連接後纔會被點擊。

如果鏈接指向具有已存在連接的網站,例如從某個網站加載網頁時的同一網站鏈接,情況會有所不同。今天,瀏覽器使用持久HTTP連接,並且會嘗試在一段時間內打開站點的連接,以防發送更多請求。如果用戶點擊同一站點鏈接,則可能會使用現有的連接,該連接仍然是以前的請求打開的。當然,這些連接也將服務器上的資源綁定在一起,因此服務器在閒置一段時間後也會關閉連接。