1、爲何要升級https
- 保護用戶數據傳輸過程當中的安全。
- 運營商網絡劫持問題愈來愈嚴重,各類廣告插入、強制跳App下載等手段嚴重影響用戶體驗,若是有違法內容或者用戶被騙,還會牽連到考拉。
- Apple要求iOS平臺App在2017.1.1開始強制啓用https,不然不容許上架App Store;啓用https的應用若是要在各平臺都正常,需應用內部webview打開的站點也所有啓用https。
- 隨着web標準的更新,愈來愈多的新特性(好比Service Worker等)要求站點開啓HTTPS才能使用;
2、目標
- 調整考拉前端代碼,使其可同時支持https,http訪問;
- 與平常開發同步進行,不影響平常開發;
- 穩步啓用https,http雙協議支持,最大限度避免https上線致使的問題;
3、前端作了哪些調整
升級範圍爲考拉前臺全部站點,包括wap、web等工程,歷史代碼量大;主要是將原寫死http協議的地方改形成相對協議,使其可同時兼容http及https服務;css
1. 頁面內資源協議修改
頁面資源包括幾部分: 靜態資源(js,css,ui圖片,視頻等等),動態內容修改前端
- 靜態資源
- js: 調整js內部的http資源引用爲相對協議,可是傳遞給外部應用的數據則根據 location.protocol 自動補全爲當前頁面使用的協議; 其次調整頁面對js的引用,使js資源引用爲相對協議;
- css:調整mcss中圖片等資源引用URL爲相對協議;調整頁面對css的引用爲相對協議;
- 打包調整: 調整打包工具配置,使其輸出靜態資源爲相對協議;
- 圖片: 調整js、ftl中的圖片縮略函數,區別是否爲考拉和nos的圖片,判斷是否支持https作相應縮略處理,防止外部圖片不支持https而顯示不出來;全工程查找並替換硬編碼圖片標籤src屬性;
- 外部庫調整: 好比NEJ的一些模塊或者工具,在URL改成相對協議是,認爲其不是一個絕對地址,按相對協議解析會報錯,會致使資源加載問題; 好比文件上傳功能,在fallback到flash方案時,flash信息都是寫死爲http,也作了調整;
- 動態內容
後端給數據,前端顯示類型的內容:
- 圖文詳情:用正則匹配圖文詳情裏面的img,video標籤,並替換http協議爲相對協;
- 頁面內部插值輸出:調整js、ftl縮略圖過濾器,爲未使用過濾器的圖片等資源增長過濾器,自動進行相對協議處理;
- 頁面跳轉
因爲部分運營配置的頁面,都是直接配置了http連接,用戶點擊頁面的連接很容易跳回到http,不能長期在https下使用,因而咱們在頁面的a標籤點擊時自動根據當前頁面協議,調整a標籤的href屬性的協議爲當前協議,來支持正常跳轉。
2. CSP規則調整
原CSP規則限制了頁面內部加載的資源,協議必須一直,可是https上線初期緩和內容難以免,因此在CSP中增長了規則,容許瀏覽器加載混合內容(僅限圖片、視頻);web
3. 外部關聯調整
- 微信支付: 調整微信支付後臺登記的安全域名信息,增長https url,使其同時支持雙協議; 可是此調整不能在業務高峯期作,不然可能影響線上支付;
4、升級過程
這裏僅僅列出主要的步驟,細節還比較多:後端
- 前端修改雙協議支持後的代碼上線,並讓cdn支持https
- 公司內網雙協議打開進行內部小範圍試用
- 線上雙協議打開,可是不開啓https強制跳轉
- 線上功能級別灰度啓用https,讓用戶能夠從一些頁面開始使用https
- 所有放開
5、後續其它能夠作的
- 上線h2, 已經在作了,很快開始內部測試
- 域名收斂
- 其它優化等
by 漁樵瀏覽器