亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

大型網站的HTTPS實踐(四):協議層以外的實踐

2020-04-12 12:30:24
字體:
來源:轉載
供稿:網友
前言

網上介紹 https 的文章并不多,更鮮有分享在大型互聯網站點部署 https 的實踐經驗,我們在考慮部署 https 時也有重重的疑惑。

本文為大家介紹百度 HTTPS 的實踐和一些權衡 , 希望以此拋磚引玉。

協議層以外的實踐工作

全站覆蓋 https 的理由

很多剛接觸 https 的會思考,我是不是只要站點的主域名換了 https 就可以?答案是不行。
https 的目的就是保證傳輸過程的安全,如果只有主域名上了 https,但是主域名加載的資源,比如 js,css,圖片沒有上 https,會怎么樣?

從效果上來說,沒有達到保證網站傳輸過程安全的目的,因為你的 js,css,圖片仍然有被劫持的可能性,如果這些內容被篡改 / 嗅探了,那么 https 的意義就失去了。

瀏覽器在設計上早就考慮的這樣的情況,會有相應的提示。具體的實現依賴瀏覽器,例如地址欄鎖形標記從綠色變為黃色 , 阻止這次請求,或者直接彈出非常影響用戶體驗的提示 (主要是 IE),用戶會感覺厭煩,疑惑和擔憂安全性。


很多用戶看見這個鏈接會習慣性的點” 是”,這樣非 https 的資源就被禁止加載了。非 ie 的瀏覽器很多也會阻止加載一些危害程度較高的非 https 資源(例如 js)。我們發現移動端瀏覽器的限制目前會略松一些。

所以這里要是沒做好,很多情況連網站的基本功能都沒法正常使用。

站點的區別

很多人剛接觸 https 的時候,覺得不就是部署證書,讓 webserver 支持 https 就行了嗎。
實際上對于不同的站點來說,https 的部署方式和難度有很大的區別。對于一個大型站點來說,讓 webserver 支持 https,以及對 webserver 在 https 協議特性上做一些優化,在遷移的工作比重上,可能只占到 20%-40%。

我們考慮下以下幾種情況下,部署 https 的方案。

簡單的個人站點

簡單的定義:資源只從本站的主域或者主域的子域名加載。
比如 axyz 的個人 blog,域名是 axyzblog.com。加載主域名下的 js 和圖片。


這樣的站部署 https,在已有證書且 webserver 支持的情況下,只需要把主域名替換為 https 接入,然后把資源連接修改為 https:// 或者 //。

復雜的個人站點

復雜的定義:資源需要從外部域名加載。


這樣就比較麻煩了,主域資源容易適配 https,在 cdn 上加載的資源還需要 cdn 服務商支持 https。目前各大 cdn 的服務商正在逐漸提供 https 的支持,需要遷移的朋友可以看看自己使用的 cdn 是否提供了這項能力。一些 cdn 會對 https 流量額外收費。


Cdn 使用 https 常見的方案有:

網站主提供私鑰給 cdn,回源使用 http。
cdn 使用公共域名,公共的證書,這樣資源的域名就不能自定義了?;卦词褂?http。
僅提供動態加速,cdn 進行 tcp 代理,不緩存內容。
CloudFlare 提供了 Keyless SSL 的服務,能夠支持不愿意提供私鑰 , 不想使用公共的域名和證書卻又需要使用 cdn 的站點了。

簡單的大型站點

簡單的定義: 資源只從本站的主域 , 主域的子域,或者自建 / 可控的 cdn 域名加載,幾乎沒有第三方資源。如果網站本身的特性就如此,或愿意改造為這樣的類型,部署 https 就相對容易。Google Twitter 都是非常好的范例。優點:已經改成這樣的站點,替換 https 就比較容易。缺點:如果需要改造,那么要很大的決心,畢竟幾乎不能使用多樣化的第三方資源了。

復雜,訪問速度重要性稍低的大型站點

復雜的定義:從本站的非主域,或者第三方站點的域名有大量的第三方資源需要加載,多出現在一些平臺類,或者有復雜內容展現的的網站。

訪問速度要求:用戶停留時間長或者強需求,用戶對訪問速度的耐受程度較高。比如門戶,視頻,在線交易類(比如火車票 機票 商城)網站。

這樣的站點,可以努力推動所有相關域名升級為支持 https。我們用下圖舉例說明下這樣修改會導致一個網站的鏈接發生怎樣的改變。


負責流量接入的團隊將可控的接入環境改造為 http 和 https 都支持,這樣前端工程的工作相對就少一些。大部分時候將鏈接從 http:// 替換為 // 即可 . 在主域名是 https 的情況下,其它資源就能自動從 https 協議下加載。一些第三方資源怎么辦?一般來說只有兩種選擇,一遷移到自己的 cdn 或者 idc 吧,二強制要求第三方自己能支持 https。

以全站 https 接入的 facebook 舉例。第三方廠商想在 facebook 上線一個游戲。facebook:請提供 https 接入吧。第三方想:能賺錢啊,還是提供下 https 接入吧。所以,足夠強勢,有吸引力,合作方也有提供 https 的能力的話,這是完全可行的。如果你的平臺接入的都是一些個人開發者,而且還賺不到多少錢的情況下,這樣就行不通了。

優點:前端改動相對簡單,不容易出現 https 下還有 http 的資源問題。

缺點:通常這樣的實現下,用戶的訪問速度會變慢,比如從 2.5 秒變為 3 秒,如上述的理由,用戶還是能接受的。對第三方要求高。

復雜,訪問速度有嚴格要求的大型站點

復雜的定義:同上。

訪問速度要求:停留時間不長,用戶對訪問速度的心理預期較高。 但是如果用戶把網站當作工具使用,需要你很快給出響應的時候,這樣的實現就不好了。后續幾個部分我們介紹下這些優化的抉擇。

域名的選擇

域名對訪問速度的影響具有兩面性:域名多,域名解析和建立連接的時間就多;域名少,下載并發度又不夠。

https 下重建連接的時間成本比 http 更高,對于上面提到的簡單的大型站點 , 可以只用 1-3 個域名就能滿足需求,對于百度這樣富展現樣式較多的搜索引擎來說,頁面可能展示的資源種類太多。而不同類型的資源又是由不同的域名 (不同的產品 或者第三方產品) 提供的服務,換一個詞搜索就可能需要重新建立一些資源的 ssl 鏈接,會讓用戶感受到卡頓。


如果將域名限制在有限的范圍 (一般 2-6 個左右),維持和這些域名的連接,合并一些數據,加上有 spdy,http2.0 來保證并發,是可以滿足我們的需求的。我們的現狀是:百度搜索有數百個資源域名在加載各類的資源。這就變成了如何解決這樣的問題:如何用 2-6 個有限的域名提供數百個域名的服務,這就涉及了下一節,代理接入與 cdn。

代理接入

當域名從數百域名縮減到個位數的時候,就不可避免的需要談到統一接入,流量轉發和調度等內容。通常的站點資源大都是從主域名 +cdn 進行加載,所以我們可以把域名分為這兩類,進行替換。


替換后的幾個 cdn 域名都指向相同的 cname,這樣的話意味著用戶訪問的途徑變為如下的方式。


這樣 ssl 的握手只在用戶和兩類節點之間進行,維持連接相對容易很多,也不需要每個域名都去申請證書,部署 https 接入。

這個方式會遇到域名轉換,數據透傳,流量調度等一系列的問題,需要進行整體設計架構,對很多細節都需要進行優化,在運維和研發上都有不小的投入。

理想的方式:這樣就只需要和 cdn 節點進行 https 握手,大幅縮短了握手的 rtt 時間 (cdn 節點一般廣泛的分布在離用戶很近的地方,而主域節點一般都比較有限). 這樣部署會對 cdn 的運維和研發能力有更高的要求。


大家有沒發現,這樣的接入就把一個復雜的站點變為簡單的站點了?

連接復用

連接復用率可以分為 tcp 和 ssl 等不同的層面,需要分開進行分析和統計。

連接復用的意義

HTTP 協議 (RFC2616) 規定一個域名最多不能建立超過 2 個的 TCP 連接。但是隨著互聯網的發展,一張網頁的元素越來越多,傳輸內容越來越大,一個域名 2 個連接的限制已經遠遠不能滿足現在網頁加載速度的需求。

目前已經沒有瀏覽器遵守這個規定,各瀏覽器針對單域名建立的 TCP 連接數如下:
瀏覽器 連接數
Firefox 2 2
Firefox 3+ 6
Chrome 6
Ie10 8
IE8 6
Safari 5 6
Opera 12 6

表格 1 瀏覽器單域名建立的最大并發連接數

從上表看出,單個域名的連接數基本上是 6 個。所以只能通過增加域名的方式來增加并發連接數。在 HTTP 場景下,這樣的方式沒有什么問題。但是在 HTTPS 連接下,由于 TLS 連接建立的成本比較高,增加并發連接數本身就會帶來較大的延遲,所以對域名數需要一個謹慎的控制。

特別是 HTTP2 即將大規模應用,而 HTTP2 的最大特性就是多路復用,使用多個域名和多個連接無法有效發揮多路復用和壓縮的特性。

那 HTTPS 協議下,一張網頁到底該有多少域名呢?這個其實沒有定論,取決于網頁需要加載元素個數。

預建連接

既然從協議角度無法減少握手對速度的影響,那能不能提前建立連接,減少用戶可以感知的握手延遲呢?當然是可以的。思路就是預判當前用戶的下一個訪問 URL,提前建立連接,當用戶發起真實請求時,TCP 及 TLS 握手都已經完成,只需要在連接上發送應用層數據即可。

最簡單有效的方式就是在主域下對連接進行預建,可以通過請求一些靜態資源的方式。但是這樣還是不容易做到極致,因為使用哪個連接,并發多少還是瀏覽器控制的。例如你對 a 域名請求一個圖片,瀏覽器建立了兩個連接,再請求一張圖片的時候,瀏覽器很大概率能夠復用連接,但是當 a 域名需要加載 10 個圖片的時候,瀏覽器很可能就會新建連接了。

Spdy 的影響

Spdy 對于連接復用率的提升非常有效,因為它能支持連接上的并發請求,所以瀏覽器會盡量在這個鏈接上保持復用。

其它

也可以嘗試一些其他發方法,讓瀏覽器在訪問你的網站之前就建立過 https 連接,這樣 session 能夠復用。HSTS 也能有效的減少跳轉時間,可惜對于復雜的網站來說,開啟需要考慮清楚很多問題。

優化的效果

從百度的優化經驗來看看,如果不開啟 HSTS,用戶在瀏覽器直接訪問主域名,再通過 302 跳轉到 HTTPS。增加的時間平均會有 400ms+,其中 302 跳轉和 ssl 握手的因素各占一半。但是對于后續的請求,我們做到了對絕大部分用戶幾乎無感知。

這 400ms+ 還有很多可以優化的空間,我們會持續優化用戶的體驗。

HTTPS 遷移遇到的一些常見問題

傳遞 Referrer

我們可以把自己的網站替換為 https,但是一般的站點都有外鏈,要讓外鏈都 https 目前還不太現實。很多網站需要從 referrer 中判斷流量來源,因此對于搜索引擎這樣的網站來說,referer 的傳遞還是比較重要的。如果不做任何設置,你會發現在 https 站點中點擊外鏈并沒有將 referrer 帶入到 http 請求的頭部中(http://tools.ietf.org/html/rfc7231#section-5.5.2)。現代的瀏覽器可以用 meta 標簽來傳遞 refer。(http://w3c.github.io/webappsec/specs/referrer-policy)
<meta name="referrer" content="always"> 傳遞完整的 url<meta name="referrer" content="origin">只傳遞站點,不包含路徑和參數等。

對于不支持 meta 傳遞 referrer 的瀏覽器,例如 IE8, 我們怎么辦呢?

可以采用再次跳轉的方法,既然 HTTPS 下不能給 HTTP 傳遞 referer,我們可以先從 HTTPS 訪問一個可控的 http 站點,把需要傳遞的內容放到這個 http 站點的 url 中,然后再跳轉到目標地址。

form 提交

有時需要將 form 提交到第三方站點,而第三方站點又是 http 的地址,瀏覽器會有不安全的警告??梢院?referrer 的跳轉傳遞采取相似的邏輯。
但是這樣對 referer 和 form 等內容的方案,并不是完美的解決方法,因為這樣還是增加了不安全的因素(劫持,隱私泄露等 )。理想情況需要用戶升級符合最新規范的瀏覽器,以及推進更多的站點遷移至 https。

視頻播放

簡單來說,如果你使用 http 的協議來播放視頻,那么瀏覽器仍然會有不安全的提示。所以你有兩種選擇,1 讓視頻源提供 https。2 使用非 http 的協議,如 rtmp 協議。

用戶異常

在 https 遷移的過程中,也會有不少熱心的用戶向我們反饋遇到的各種問題。 常見的有以下的一些情況:

1、用戶的系統時間設置錯誤,導致提示證書過期。
2、用戶使用 fiddler 等代理進行調試,但是沒有添加這些軟件的根證書,導致提示證書非法。
3、用戶使用的 Dns 為公共 dns 或者跨網設置 dns,一些請求被運營商作為跨網流量攔截。
4、連通性有問題,我們發現一個小運營商的 https 失敗率奇高,又沒法聯系到他們,只能不對他們進行 https 的轉換。
5、慢。有時由于網絡環境的因素,用戶打開其他網站也慢,ping 哪個網站都要 500-2000ms。這時 https 自然也會很慢。

結束語

對于復雜的大型網站來說,HTTPS 的部署有很多工作要完成。

面對困難和挑戰,有充足的動力支持著我們前進:https 上線后,劫持等原因導致的用戶功能異常,隱私泄露的反饋大幅減少。

熱心的用戶經常會向我們反饋遇到的各種問題。在以前,有時即使我們確定了是劫持的問題,能夠解決問題的方法也非常有限。每當這種時候,自己總會產生一些無力感。

HTTPS 的全站部署,給我們提供了能解決大部分問題的選項。能讓一個做技術的人看到自己的努力解決了用戶的問題,這就是最棒的收獲。

HTTPS 沒有想像中難用和可怕,只是沒有經過優化。與大家共勉。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品2019中文字幕神马| 亚洲国产小视频在线观看| 亚洲电影免费观看高清完整版在线观看| 亚洲国产第一页| 91夜夜揉人人捏人人添红杏| 欧美日韩裸体免费视频| 日韩av一区二区在线| 国产欧美一区二区| 红桃av永久久久| 91色在线视频| 欧美激情国产日韩精品一区18| 国产精品美女久久久免费| 最近免费中文字幕视频2019| 狠狠躁天天躁日日躁欧美| 日韩中文字幕网址| 久久黄色av网站| 亚洲精品电影网站| 亚洲成人xxx| 亚洲女人被黑人巨大进入al| 亚洲国产精品久久久久秋霞不卡| 美女视频黄免费的亚洲男人天堂| 久久99久久99精品免观看粉嫩| 精品国产精品自拍| 欧美日韩精品在线视频| 欧美精品在线观看| 国产丝袜一区二区三区免费视频| 97热在线精品视频在线观看| 成人av在线天堂| 色哟哟网站入口亚洲精品| 97精品在线观看| 美女少妇精品视频| 国产精品入口免费视| 日本道色综合久久影院| 国产精品久久久久久久午夜| 欧美精品videosex牲欧美| 色妞欧美日韩在线| 精品中文字幕在线2019| 日韩av中文字幕在线播放| 成人福利视频在线观看| 美女视频黄免费的亚洲男人天堂| 欧美黑人巨大xxx极品| 国内揄拍国内精品少妇国语| 亚洲美女视频网| 亚洲最新视频在线| 欧美成人亚洲成人| 国产亚洲a∨片在线观看| 久久久久亚洲精品国产| 欧美国产日韩一区二区| 中文字幕视频一区二区在线有码| 欧美最猛性xxxxx(亚洲精品)| 精品久久久久久久久久久久| 久久久www成人免费精品张筱雨| 国产欧美日韩免费看aⅴ视频| 午夜精品理论片| 久久久97精品| 国产一区二区三区视频在线观看| 欧美韩国理论所午夜片917电影| 精品国产欧美一区二区五十路| 热99在线视频| 国产免费一区二区三区在线观看| 久久深夜福利免费观看| 欧美日韩亚洲视频一区| 欧美性猛交xxxx免费看漫画| 亚洲精品一区二区网址| 精品少妇v888av| 欧美乱人伦中文字幕在线| 日韩成人在线视频观看| 亚洲最大的网站| 欧美成年人网站| 欧美成人精品在线| 久久久久久综合网天天| 国产有码在线一区二区视频| 欧美一区三区三区高中清蜜桃| 欧美久久精品午夜青青大伊人| 亚洲天堂av在线免费| 久久久91精品国产一区不卡| 中文字幕国产亚洲| 国产一级揄自揄精品视频| 91精品国产乱码久久久久久蜜臀| 91精品国产高清自在线| 亚洲国产第一页| 久久成人亚洲精品| 日韩女优人人人人射在线视频| xxx一区二区| 情事1991在线| 亚洲精品v天堂中文字幕| 2018中文字幕一区二区三区| 日韩一区二区久久久| 久久久久久美女| 欧美性猛交xxxxx水多| 亚洲国语精品自产拍在线观看| 日韩视频免费在线| 欧美区二区三区| 91地址最新发布| 亚洲国产精品99| 国产精品第三页| 亚洲人永久免费| 国产欧美一区二区三区四区| 国内精品一区二区三区四区| 色妞色视频一区二区三区四区| 91精品视频免费看| 国产精品白嫩初高中害羞小美女| 国产成人精品免高潮在线观看| 亚洲欧美日韩国产中文专区| 成人福利视频在线观看| 久久精品国产久精国产一老狼| 国产日韩欧美中文在线播放| 欧美裸体xxxx| 日韩在线观看免费全| 日韩精品中文字幕视频在线| 亚洲人成亚洲人成在线观看| 激情av一区二区| 日韩av手机在线观看| 久久99热这里只有精品国产| 91精品国产综合久久香蕉| 日韩欧美综合在线视频| 91国内免费在线视频| 日韩精品免费在线播放| 91网站在线免费观看| 亚洲国产日韩精品在线| 欧美又大又硬又粗bbbbb| 日韩av网站导航| 国产视频福利一区| 日韩大陆欧美高清视频区| 国产日韩精品一区二区| 久久国产精品偷| 亚洲精品中文字幕女同| 久久国产精品亚洲| 九九久久久久99精品| 91美女福利视频高清| 欧美高清在线观看| 亚洲jizzjizz日本少妇| 亚洲在线一区二区| 日韩视频免费在线| 97在线观看视频国产| 日本伊人精品一区二区三区介绍| 91亚洲国产精品| 中文字幕日本欧美| 国内精品模特av私拍在线观看| 中文字幕精品久久| 欧美成人精品在线观看| 亚洲欧美日韩一区二区在线| 亚洲有声小说3d| 亚洲成人黄色网| 亚洲综合在线做性| 日韩欧美福利视频| 午夜精品福利视频| 一区二区三区无码高清视频| 国产精品激情av电影在线观看| 亚洲大胆人体在线| 欧美视频中文在线看| 欧美激情欧美狂野欧美精品| 亚洲成人免费网站| 精品久久香蕉国产线看观看gif| 国产69精品久久久久99| 亚洲曰本av电影| 精品国内产的精品视频在线观看| 日韩亚洲欧美中文在线| 色偷偷综合社区| 国产精品国产三级国产aⅴ浪潮| 成人免费观看49www在线观看| 一本一本久久a久久精品牛牛影视| 动漫精品一区二区| 成人欧美在线观看|