HTTPS 不方便的地方!你知道多少?
7月中旬的時候,我發(fā)現(xiàn)自己又在盯著投影儀屏幕,看著維基百科的網(wǎng)頁到底能不能打開了。運(yùn)氣好的話,請求發(fā)出15-20秒之后,頁面應(yīng)該就開始渲染了,如果運(yùn)氣不好,瀏覽器連接沒有超時的話,可能要等將近一分鐘,于是幾天下來的課堂上,滿眼都是“服務(wù)器停止響應(yīng)”。
不止是維基百科,CNN國際加載時間也差不多,Googe主頁也好不到哪去。即便是現(xiàn)在這個站點(diǎn),還得要十來秒鐘來加載最小內(nèi)容后,才開始頁面渲染,一般情況下耗時只會更長。
今年我在烏干達(dá)的一個鄉(xiāng)村,為一個職校班級的學(xué)生講解Web開發(fā)。他們擁有一個堆滿運(yùn)行著Windows的Dell桌面、一排Ubuntu的樹莓派等各種電腦的計(jì)算機(jī)實(shí)驗(yàn)室,但是卻只能通過地球同步衛(wèi)星來上網(wǎng),于是只能干等著,等吧,等吧。
我想解釋一下原因—更重要的是,他們到底是怎么以舒適和安全的名義,把上網(wǎng)體驗(yàn)搞得越來越差的。
首先,考慮一下衛(wèi)星上網(wǎng)的條件限制,如果你對這個世界很了解,跳過若干章節(jié)吧,否則請聽我簡單說一下挑戰(zhàn)在哪里。
對于衛(wèi)星上網(wǎng),光速是ping包耗時的一個影響因素:信號僅僅是通過真空和大氣層的混合空間進(jìn)行傳播,就可以在約89,000英里(大約一萬五千多公里)的區(qū)域內(nèi)耗費(fèi)掉大約半秒鐘的傳輸時間,如果一路都是真空,ping延遲的最低值差不多是506毫秒。
這只是信號到地球同步軌道的往返時間,實(shí)際上,有時候在任一端路由數(shù)據(jù)包,在衛(wèi)星重新傳輸還要耗時間。
但在大多數(shù)情況下,丟包還不是最致命的,畢竟這些數(shù)據(jù)包將進(jìn)入軌道并返回。數(shù)據(jù)包一路傳輸?shù)沫h(huán)節(jié)太多,許多因素都可能導(dǎo)致數(shù)據(jù)包丟失。丟包率達(dá)到50%是正常事,80%都不稀奇。
因此,你會丟掉一半甚至更多的數(shù)據(jù)包,而對于僥幸沒丟掉的那些數(shù)據(jù)包,每個包的延遲時間約為三分之二秒。
這就有足夠的理由來建一個本地的緩存服務(wù)器了,更重要的是幾乎所有的商業(yè)衛(wèi)星連接都帶有數(shù)據(jù)流量上限,像我所在的那個地方上限就是50GB /月。 除此之外,還得支付超額費(fèi)用,或者等到下個月才能獲得數(shù)據(jù)流量。因此,如果能在本地緩存一下URL,只在第一次上網(wǎng)時計(jì)費(fèi),那么就可以玩一把緩存,在我教學(xué)的那所學(xué)校里就有人是這么干的。
當(dāng)時我就在那里傻站著,只是眼睜睜地指望網(wǎng)頁能夠打開,可以繼續(xù)給一群職業(yè)學(xué)生上點(diǎn)基礎(chǔ)課程。 因?yàn)榫S基百科沒法緩存,谷歌沒法緩存,Meyerweb也沒法緩存,幾乎沒啥能緩存的。
為啥?HTTPS。
在本地建的緩存服務(wù)器,是用來加速訪問一些常用的網(wǎng)站,減少對帶寬的使用,是一個“中間人”。 而HTTPS設(shè)計(jì)思路是為了防止中間人攻擊,結(jié)果讓本地緩存服務(wù)器徹底沒法玩了,所以我一直在干等著遠(yuǎn)程資源,每次請求都吃掉了那個月的數(shù)據(jù)上限。
互聯(lián)網(wǎng)轉(zhuǎn)型HTTPS的這個趨勢,已經(jīng)使下一波十億用戶對其敬而遠(yuǎn)之 - 更不用說前五億用戶了。 我看到有人聲稱“投資HTTPS,讓網(wǎng)絡(luò)更快更便宜,更容易為網(wǎng)民服務(wù)”,如果你把網(wǎng)民都當(dāng)成是有千兆光纖接入的人,那么你牛。也許對于大多數(shù)最后一英里是銅質(zhì)網(wǎng)線的人來說是沒錯, 但對于玻璃和電線都夠不著的人來說純屬扯淡。
如果你頗感意外,那絕不止你一個人。 我沒有聽到任何關(guān)于它的消息,所以我問過一些同事是否知道這個問題, 他們不僅沒有,反應(yīng)跟我差不多:這不應(yīng)該是一個現(xiàn)實(shí)問題,或者:我們已經(jīng)聽說過了! 但不是。
我們能做點(diǎn)什么嗎? 對于剛開始用瀏覽器的用戶,據(jù)我所知,可以用Service Workers作為“中間人“來規(guī)避HTTPS的問題。 因此如果通過是HTTPS提供內(nèi)容,那么創(chuàng)建Service Workers應(yīng)該是當(dāng)前的首要任務(wù)之一,即使它只是為了直接進(jìn)行本地緩存。 我還沒有為meyerweb做過一次Service Workers,但我很快就會這樣做。
這對于比較新的瀏覽器來說非常棒,但不是每個人都可以選擇新的版本。 有時他們受到還在用的底層老操作系統(tǒng)的限制,還得運(yùn)行舊版的瀏覽器,不支持Service Workers。例如,一個只能用裝了IE8的Windows XP電腦的實(shí)驗(yàn)室,或者甚至在舊電腦上運(yùn)行Windows 95或其它老的操作系統(tǒng)。 那些人最有可能是那些只能用衛(wèi)星上網(wǎng),或其他類似的慢速上網(wǎng)服務(wù)的人,用起來還有一點(diǎn)沒得商量余地的數(shù)據(jù)上限。 即使在高速上網(wǎng)的環(huán)境里,仍然還有在使用一些較舊的操作系統(tǒng)和瀏覽器的,例如某些公共圖書館。 HTTPS是加強(qiáng)網(wǎng)絡(luò)安全意識了,結(jié)果卻弄得全世界許多人上不了網(wǎng)。
除了建議部署個Service Workers,讓那些眼巴巴等著上網(wǎng)的人能滿足一下,我也沒有別的法子了。 我認(rèn)為HTTPS總體來說可能是好事,也不知道還能有什么更好的。 我唯一能知道就是,自己正在眼睜睜得看著那些逐漸遠(yuǎn)離我們的數(shù)據(jù)中心和思想的人,正在變得負(fù)面了、疏遠(yuǎn)了。
譯者介紹:
張文劍,南京機(jī)敏科技首席架構(gòu)師,主攻OpenStack VDI,參與編寫中國開源云聯(lián)盟桌面云標(biāo)準(zhǔn),主持機(jī)敏云平臺1.0、2.0版本的研發(fā)。















 
 
 











 
 
 
 