2015-12-07 88 views
7

我不知道如何去問它,所以我會嘗試用一個例子來解釋。HTTP/2和CNAME如何協同工作?

我有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 

這裏是我的問題:應在第二個例子中的所有資源瀏覽器通過單一連接被加載,因爲它們將被加載時,有沒有別名域?

感謝您的幫助。

回答

4

如果別名解析爲不同的IP,則資源無法通過同一個連接加載(如果我沒有弄錯的話,稱爲「連接重用」,HTTP/2)。這是CDN的問題。

但是,爲了您的安心和CDN的高興,連接重用是一件棘手的事情,即使您的所有域名解析爲相同的IP,您的問題也可能不會發生。

要面向未來,你可能想確保你的網站有證書擴展configured correctly啓用連接複用。

在當前版本的Firefox和Chrome瀏覽器中,我甚至沒有注意到連接重用,即使是在製作證書時要格外小心,當然也要確保這兩個域指向相同的IP。

而且只是一些食物的想法:HTTP/2通過TLS requires SNI,只開擴的連接時發生。因此,當您第一次連接到一個域時,例如example.com,服務器將獲得SNI數據。但是,如果重複使用相同的連接向cdn.example.com發送請求,服務器將無法獲取此類數據。某些服務器或使用場景可能對此不對稱性很敏感,這可能與瀏覽器實現(或不使用)連接重用的方式有關。但這些都只是你的猜測真正...

+0

我的示例中的別名將始終解析爲相同的IP。他們不是嗎? –

+0

你是對的,現在修復它。 – dsign

+0

我在技術上有可能,但目前尚未實施。我對嗎? –

4

的規範並不要求其再利用,但它明確地包括當重用是可以接受的信息 - 解析到同一個IP地址,如兩臺主機。

https://tools.ietf.org/html/rfc7540#section-9.1.1

連接被到原始服務器製成,無論是直接或
通過隧道使用CONNECT方法(第8.3節),MAY
用於具有多個不同的URI權限請求被重用創建
組件。只要源服務器
具有權威性(第10.1節),就可以重新使用連接。對於沒有TLS的TCP連接,
這取決於已解析爲相同IP地址的主機。

對於「https」資源,連接重用還取決於
具有對URI中的主機有效的證書。由服務器提供的證書必須滿足在URI中爲主機
形成新的TLS連接時客戶端將執行的任何檢查。