這次遷移總體上歷時四年,但Craver強調(diào),該工作一直以來都并非是工作重點。例如,網(wǎng)站上并不存在財務(wù)信息或是信用卡支付,網(wǎng)站信息也并非需安全防護的高價值信息。Craver指出,事實上,StackOverflow總是將性能置于安全之上:
我應(yīng)指出,性能是我們的首要驅(qū)動力,而非網(wǎng)站的安全性。雖然我們也需要安全性,但是安全本身并不值得我們付出對整個網(wǎng)站部署HTTPS所花費的時間。
Craver解釋說,HTTP/2的廣泛采用及在性能上的優(yōu)點是他們升級到HTTPS的主要驅(qū)動力。這些優(yōu)點包括:Request/Response多路復(fù)用(Multiplexing)、服務(wù)器推送技術(shù)(Server Push), 頭部壓縮(Header Compression)、數(shù)據(jù)流優(yōu)先(Stream Prioritization)和更少的域(Origin)連接等。由于瀏覽器并不支持在HTTP上實現(xiàn)HTTP/2,因此遷移到HTTPS不僅是一個性能上的需求,同時也是一個安全上的需求。
StackOverflow具有上百個域和子域。站點的主證書中包括了StackOverflow的全部主域,以及由通配符表示的域。在這種多個域的證書和IP一致的情況下,可利用HTTP/2提供的機制,支持瀏覽器對多個域使用單一的共享連接,這將提高性能。
在轉(zhuǎn)向HTTPS的過程中,還需要做一些域遷移工作。例如,需要將“meta”域從“meta.*.stackexchange.com”轉(zhuǎn)化為“*.meta.stackexchange.com”。Craver特別指出,這樣做是因為通配符必須位于域名的最左邊,單一的通配符更易于維護。
此外,網(wǎng)站中的敏感cookies現(xiàn)在是從頂級域繼承而來的,原先可訪問它們的域已經(jīng)被移動了。Craver給出了一個例子,“SendGrid”標(biāo)簽現(xiàn)已移動到“stackoverflow.email”域中。
Craver還指出,網(wǎng)站中存在著大量HTTP用戶生成內(nèi)容,例如提問中給出的圖片、用戶配置信息、Youtube視頻等。在遷移時所采取的第一步,是對所有新的用戶生成內(nèi)容強制使用HTTPS,將HTTP內(nèi)容限定為遺留內(nèi)容。然后,下一步是對遺留內(nèi)容的遷移。其中的大部分內(nèi)容僅需要進行查找并替換即可。對于那些團隊把握不準的內(nèi)容,如果內(nèi)容工作異常,那么它或者被轉(zhuǎn)化為HTTPS,或者被轉(zhuǎn)化為一個鏈接。
JavaScript代碼中也存在著數(shù)以千計的鏈接,這些鏈接基本上是使用HTTP的,甚至位于不同的“meta”域中。據(jù)Craver介紹,他們是逐個代碼分別處理的,使用“
Craver強調(diào),他們也非常重視避免丟失任何來自Google的流量,這是網(wǎng)站流量的重要來源,因而也是網(wǎng)站收入的主要來源。盡管Google所需的更改非常簡單(將301跳轉(zhuǎn)從HTTP更改為HTTPS,并更新權(quán)威鏈接),團隊也必須要慎重,以免犯錯誤。
遷移最后還會涉及WebSocket,需要將所有事情轉(zhuǎn)換為WebSocket加密,這也是為避免影響網(wǎng)站性能而在功能上的直接需要。據(jù)Craver介紹,他們可一次同時打開近五十萬個并發(fā)的websocket連接。
該博文的內(nèi)容很長,但是值得一讀。
查看英文原文: Stack Overflow Becomes HTTPS by Default