天天看點

StackOverflow轉向預設使用HTTPS

stackoverflow的首席架構師nick craver發表了一篇博文,宣布stackoverflow遷移到https。在該過程中,他們經曆了一些技術挑戰,包括對數百個域的支援、url遷移、使用者生成内容處理,以及如何達到網站所需的嚴格性能需求。

這次遷移總體上曆時四年,但craver強調,該工作一直以來都并非是工作重點。例如,網站上并不存在财務資訊或是信用卡支付,網站資訊也并非需安全防護的高價值資訊。craver指出,事實上,stackoverflow總是将性能置于安全之上:

我應指出,性能是我們的首要驅動力,而非網站的安全性。雖然我們也需要安全性,但是安全本身并不值得我們付出對整個網站部署https所花費的時間。

craver解釋說,http/2的廣泛采用及在性能上的優點是他們更新到https的主要驅動力。這些優點包括:request/response多路複用(multiplexing)、伺服器推送技術(server push), 頭部壓縮(header compression)、資料流優先(stream prioritization)和更少的域(origin)連接配接等。由于浏覽器并不支援在http上實作http/2,是以遷移到https不僅是一個性能上的需求,同時也是一個安全上的需求。

stackoverflow具有上百個域和子域。站點的主證書中包括了stackoverflow的全部主域,以及由通配符表示的域。在這種多個域的證書和ip一緻的情況下,可利用http/2提供的機制,支援浏覽器對多個域使用單一的共享連接配接,這将提高性能。

在轉向https的過程中,還需要做一些域遷移工作。例如,需要将“meta”域從“meta..stackexchange.com”轉化為“.meta.stackexchange.com”。craver特别指出,這樣做是因為通配符必須位于域名的最左邊,單一的通配符更易于維護。

此外,網站中的敏感cookies現在是從頂級域繼承而來的,原先可通路它們的域已經被移動了。craver給出了一個例子,“sendgrid”标簽現已移動到“stackoverflow.email”域中。

craver還指出,網站中存在着大量http使用者生成内容,例如提問中給出的圖檔、使用者配置資訊、youtube視訊等。在遷移時所采取的第一步,是對所有新的使用者生成内容強制使用https,将http内容限定為遺留内容。然後,下一步是對遺留内容的遷移。其中的大部分内容僅需要進行查找并替換即可。對于那些團隊把握不準的内容,如果内容工作異常,那麼它或者被轉化為https,或者被轉化為一個連結。

javascript代碼中也存在着數以千計的連結,這些連結基本上是使用http的,甚至位于不同的“meta”域中。據craver介紹,他們是逐個代碼分别處理的,使用“.url(‘/path’)”調用替換了這些連接配接。隻要啟用了特性辨別,這将從根本上轉化這些連結為https。

craver強調,他們也非常重視避免丢失任何來自google的流量,這是網站流量的重要來源,因而也是網站收入的主要來源。盡管google所需的更改非常簡單(将301跳轉從http更改為https,并更新權威連結),團隊也必須要慎重,以免犯錯誤。

遷移最後還會涉及websocket,需要将所有事情轉換為websocket加密,這也是為避免影響網站性能而在功能上的直接需要。據craver介紹,他們可一次同時打開近五十萬個并發的websocket連接配接。

該博文的内容很長,但是值得一讀。

本文轉自d1net(轉載)

繼續閱讀