用 // 代替 的好處
發(fā)表時(shí)間:2023-09-17 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]//缺省協(xié)議/缺省協(xié)議的使用,代表資源訪問(wèn)的協(xié)議和當(dāng)前頁(yè)面保持一致,如果當(dāng)前頁(yè)面是http ,采用http協(xié)議訪問(wèn),如果是https,則使用 https 協(xié)議訪問(wèn)。這樣用就不管是http還是升級(jí)到https都不用改動(dòng)代碼,現(xiàn)在很多CDN資源都是這樣引用。一般使用在內(nèi)鏈中,外鏈的協(xié)議頭具有不確定性的...
//缺省協(xié)議/缺省協(xié)議的使用,代表資源訪問(wèn)的協(xié)議和當(dāng)前頁(yè)面保持一致,如果當(dāng)前頁(yè)面是http ,采用http協(xié)議訪問(wèn),如果是https,則使用 https 協(xié)議訪問(wèn)。這樣用就不管是http還是升級(jí)到https都不用改動(dòng)代碼,現(xiàn)在很多CDN資源都是這樣引用。一般使用在內(nèi)鏈中,外鏈的協(xié)議頭具有不確定性的原因。
隨著國(guó)內(nèi)運(yùn)營(yíng)商等的大肆劫持導(dǎo)致大家在訪問(wèn)網(wǎng)站的時(shí)候插入大量的低俗廣告,降低用戶體驗(yàn),所以各大搜索引擎都希望大家盡量將站點(diǎn)轉(zhuǎn)換為https方式
//的含義?
//是缺省協(xié)議的寫法,例如
//jb51.net/css/
缺省協(xié)議默認(rèn)使用當(dāng)前協(xié)議
當(dāng)前頁(yè)面為HTTP時(shí),等效
http://jb51.net/css/
當(dāng)前頁(yè)面為HTTPS時(shí),等效
https://jb51.net/css/
使用 // 代替 http:// 的條件和好處?
當(dāng)前頁(yè)面和目標(biāo)資源同時(shí)支持HTTP和HTTPS正在從http升級(jí)到https
這樣的好處就是能根據(jù)用戶打開(kāi)頁(yè)面的方式自適應(yīng)的選擇資源的請(qǐng)求協(xié)議,
對(duì)于https頁(yè)面的內(nèi)容,瀏覽器默認(rèn)會(huì)組織非https內(nèi)容,可以避免這種情況
// 缺點(diǎn)
直接打開(kāi)本地文件調(diào)試時(shí),使用的協(xié)議是文件協(xié)議(file://)
這個(gè)時(shí)候這個(gè)協(xié)議會(huì)變成 file://jb51.net/css/顯然是不存在的
與當(dāng)前網(wǎng)站的協(xié)議保持一致,快速發(fā)布與你當(dāng)前協(xié)議相匹配的版本,同時(shí)減少SSL或其它協(xié)議版本的部署成本。開(kāi)發(fā)者不需要管服務(wù)器云端提供什么協(xié)議,只要用//符號(hào)來(lái)代表一切最適應(yīng)的匹配,這和nodeJS的思維是一脈相承的。
優(yōu)點(diǎn)如下:
因?yàn)楹芏嗑W(wǎng)站都將http升級(jí)為https,這樣就可以防止我們的網(wǎng)址被劫持,前期為了在轉(zhuǎn)換過(guò)程中我出差錯(cuò)我們沒(méi)有強(qiáng)制跳轉(zhuǎn),就是當(dāng)用戶訪問(wèn)http或https都可以正常訪問(wèn),那么里面的js,圖片,鏈接等都不能用https或http,那么有什么解決方法呢,那么解決方法來(lái)了就是用//,不要帶http:與https這樣就可以了。
//這種寫法是根據(jù)你請(qǐng)求的協(xié)議自動(dòng)添加協(xié)議的。舉個(gè)栗子:你的網(wǎng)站是http協(xié)議,那么其實(shí)你訪問(wèn)的就是http://xxxx 如果你的網(wǎng)站是https協(xié)議的,那么請(qǐng)求的地址會(huì)變成https://xxxx 要知道,如果你寫成了http://xxx. 那么如果你們的網(wǎng)站線上是https,那么可能會(huì)報(bào)安全警告,有的瀏覽器甚至沒(méi)法正常加載頁(yè)面。如果你直接寫成https,要知道,本地開(kāi)發(fā)可是http啊...
下面的內(nèi)容是來(lái)自知乎的一些經(jīng)典回復(fù)
好處很多人都答過(guò)了。升級(jí) https 當(dāng)然最能感受到這種好處。我只是補(bǔ)充一個(gè)為什么前人不這么寫的理由。當(dāng)然,確實(shí)有很多前端并不知道這種寫法。不過(guò),就算知道也很可能無(wú)法這么寫。因?yàn)?UC 瀏覽器的許多較早版本不支持這種寫法,會(huì)把 //a.b/ 直接理解為 /a.b/,也就是說(shuō),如果你在 http://example.com 的頁(yè)面里寫了 //example-cdn.net/static-file 的地址,UC 實(shí)際訪問(wèn)的是 http://example.com/example-cdn.net/static-file 。UC 過(guò)去的市占率大家是知道的。所以……
一看你就沒(méi)做過(guò)「全站 HTTPS 升級(jí)改造」。我給全站做 HTTPS 升級(jí)的時(shí)候,真的想把寫 http:// 的人砍死。尤其是數(shù)據(jù)庫(kù)里的鏈接和 JS 里拼接出來(lái)的 url。期間用了各種正則,還要人工核查。奈何寫 http:// 的程序員太多,只能作罷。有人還在評(píng)論里問(wèn)原因,原因就是如果你全寫 //,我就不用改造數(shù)據(jù)庫(kù)里的數(shù)據(jù)和源碼了,直接升級(jí) https 就行了。你可能會(huì)說(shuō) https 改造這種事情很少發(fā)生吧,巧了,我在騰訊和阿里都遇到了 https 改造 ?_? 而且在阿里的時(shí)候我要負(fù)責(zé) 1688 整站(個(gè)別部門自行改造)的前端代碼改造(不只是 HTML,還有 CSS 、JS、Velocity 模板等!簡(jiǎn)直就是臟活累活,我 TM 為什么要接這個(gè)活兒),你猜我罵寫 http:// 的人罵了多少次?有的前端還直接在 JS 里寫 http,沿用一下當(dāng)前頁(yè)面的協(xié)議你會(huì)死?
還有的前端用正則判斷 url 時(shí)居然只接受 http:// 和 https:// 不接受 //,真的是沒(méi)常識(shí)。太多程序員,太智障了。也有可能是因?yàn)樗麄儧](méi)聽(tīng)說(shuō)過(guò) HTTPS 而已。如果你還不懂,我就問(wèn)你幾個(gè)問(wèn)題:如果你用 http:// ,那你就是默認(rèn)當(dāng)前頁(yè)面是 http 協(xié)議了,你一個(gè)前端憑什么決定當(dāng)前頁(yè)面的協(xié)議?難道你不知道 http 鏈接在 https 頁(yè)面里會(huì)報(bào)錯(cuò)?你應(yīng)該沿用當(dāng)前頁(yè)面的協(xié)議,所以你要寫 //如果你用 https://,也是一樣的問(wèn)題,你怎么知道三年后會(huì)不會(huì)出現(xiàn)一個(gè) httpshe://,難道到時(shí)候你再全部改成 httpshe:// ?不要做任何明顯是錯(cuò)誤的假設(shè)!你根本就不知道當(dāng)前頁(yè)面會(huì)用什么協(xié)議打開(kāi)!所以你要用 // !類似的錯(cuò)誤假設(shè)還有很多,比如很多中國(guó)程序員都以為電話號(hào)碼只含數(shù)字和括號(hào),不含字母。真的是這樣嗎?
有人說(shuō)全局替換不就完了嗎?舉例說(shuō)明吧,假設(shè)淘寶要升級(jí) https于是你將 http:// 全部替換成 //第一個(gè) bug:你把 <a href="http://tmail.com"> 替換成了 <a href="//tmail.com"> ,然而當(dāng)時(shí) http://tmail.com 還不支持 https于是你將一定范圍內(nèi)的域名替換,http://(taobao taobao2 taobao3).com 替換成 //$1.com第二個(gè) bug:有些 JS 是這樣寫的 url = "http://" + location.hostname + '/' + path,還有寫 JS 是這樣寫的 /^http:\/\//.test(input)。你說(shuō)這個(gè)就沒(méi)法用正則了,在所有 JS 里全局搜索 http 然后人工審查吧。你知道淘寶有多少 JS 文件嗎…… 而且這些文件是緩存十年的……就算你改了,也不一定能更新。而且一旦你改錯(cuò)了,影響用戶下單,馬云損失一個(gè)億你賠得起嗎?第三個(gè) bug:有些數(shù)據(jù)根本就不在代碼里,在數(shù)據(jù)庫(kù)里,比如 user.image 的值是 http 開(kāi)頭的。于是你將 user.image 寫成 user.image.replace('http://', '//') 或者你直接改數(shù)據(jù)庫(kù)里的數(shù)據(jù)(當(dāng)數(shù)據(jù)量很大的時(shí)候,這基本是不可能的)第四個(gè) bug:你忘了改 nginx、crossdomain 里面的域名第五個(gè) bug:你忘了改配置系統(tǒng)里面的 base_url第六個(gè) bug:你的 https 頁(yè)面嵌入了一個(gè)外部的 http iframe……你就哭吧,這很難解決,運(yùn)氣好直接改成 // (外部支持 https 即可),運(yùn)氣不好就要改頁(yè)面邏輯了。第 N 個(gè) bug……HTTPS 升級(jí)就是臟活累活,你說(shuō)簡(jiǎn)單你來(lái)做,你開(kāi)始做就知道牽連的地方有多少了。最好的方案還是把協(xié)議做成很容易變更的方式,比如遵循當(dāng)前頁(yè)面,或者用變量,反正寫死 http:// 肯定不好。有些程序員寫代碼的時(shí)候,明明知道有 HTTPS 卻不去兼容,心理想著「反正我在這個(gè)公司呆兩年就走了,HTTPS 至少還有三年呢」然后就寫出了垃圾代碼。
越來(lái)越多的開(kāi)發(fā)者,在鏈接文件時(shí),采用//來(lái)代替http://,即如< a href="http://jb51.net……一般寫為 < a href = " //http://jb51.net……,這與傳統(tǒng)帶http有什么區(qū)別?
原本你的網(wǎng)站是http的,所有的src都是 http開(kāi)頭,以為遭到狗屎運(yùn)營(yíng)商大量劫持,在你的頁(yè)面塞了一大堆少兒不宜/和單純廣告的內(nèi)容的時(shí)候,有人告訴你替換https可以改善這個(gè)問(wèn)題,那么這個(gè)時(shí)候你就知道 之前的src和ajax寫得//而不是http://是當(dāng)初多么明智的決定。。。
逐浪CMS官方
隨著越來(lái)越多開(kāi)源和云平臺(tái)的涌現(xiàn)以及SSL協(xié)議的廣泛導(dǎo)入(如逐浪CMS已經(jīng)全面啟用了SSL協(xié)議支持),人們?cè)谶M(jìn)行開(kāi)發(fā)時(shí)不得不面對(duì)http協(xié)議的選擇和識(shí)別。眾所周知,過(guò)多的ssl引用,可能會(huì)造成普通站點(diǎn)的效率低下,但我們不能為此再去重新設(shè)計(jì)一個(gè)純SSL版本。表現(xiàn)在開(kāi)源庫(kù)上,一般平臺(tái)都同時(shí)提供SSL版和非SSL版。如這兩個(gè)庫(kù):https://code.z01.com/js/jquery-3.2.1.slim.min.jshttp://code.z01.com/js/jquery-3.2.1.slim.min.js其引用效果是一致的。于是開(kāi)發(fā)者們直接用"//網(wǎng)址/文件"方法來(lái)替代前面的協(xié)議,使之自動(dòng)識(shí)別。即具體是SSL協(xié)議還是普通http協(xié)議,交給瀏覽器去自動(dòng)識(shí)別并自動(dòng)與當(dāng)前站點(diǎn)匹配,從而實(shí)現(xiàn)最佳的安全請(qǐng)求和最高效的加載方法。概言之,這是一種開(kāi)發(fā)方法和開(kāi)發(fā)思維,云計(jì)算的web與移動(dòng)開(kāi)發(fā)日益壯大。
相關(guān)推薦:
thinkPHP 發(fā)展 ( http://w2ks.com)
以上就是用 // 代替 的好處的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語(yǔ),涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。