//缺省協議
/缺省協議的使用,代表資源訪問的協議和當前頁面保持一致,如果當前頁面是http ,採用http協議訪問,如果是https,則使用https 協定存取。這樣用就不管是http還是升級到https都不用改動程式碼,現在很多CDN資源都是這樣引用。一般使用在內鏈中,外鏈的協議頭具有不確定性的原因。
隨著國內業者等的大肆劫持導致大家在訪問網站的時候插入大量的低俗廣告,降低用戶體驗,所以各大搜尋引擎都希望大家盡量將網站轉換為https方式
//的意思?
//是預設協定的寫法,例如
//jb51.net/css/
預設協定預設使用當前協定
目前頁面為HTTP時,等效
http://jb51.net/css/
目前頁面為HTTPS時,等效
https://jb51.net/css/
#使用// 取代http:// 的條件和好處?
目前頁面和目標資源同時支援HTTP和HTTPS正在從http升級到https
#這樣的好處就是能根據使用者開啟頁面的方式自適應的選擇資源的請求協議,
對於https頁面的內容,瀏覽器預設會組織非https內容,可以避免這種情況
// 缺點
直接打開當本機檔案偵錯時,使用的協定是檔案協定(file://)
這時候這個協定會變成file://jb51.net/css/顯然是不存在的
與目前網站的協議保持一致,快速發布與你目前協議相符的版本,同時減少SSL或其它協議版本的部署成本。開發者不需要管伺服器雲端提供什麼協議,只要用//符號來代表一切最適應的匹配,這和nodeJS的思維是一脈相承的。
優點如下:
因為很多網站都將http升級為https,這樣就可以防止我們的網址被劫持,前期為了在轉換過程中我出差錯我們沒有強制跳轉,就是當用戶訪問http或https都可以正常訪問,那麼裡面的js,圖片,鏈接等都不能用https或http,那麼有什麼解決方法呢,那麼解決方法來了就是用// ,不要帶http:與https這樣就可以了。
//這種寫法是根據你要求的協定自動添加協定的。舉個栗子:你的網站是http協議,那麼其實你訪問的就是http://xxxx 如果你的網站是https協議的,那麼請求的地址會變成https://xxxx 要知道,如果你寫成了http://xxx. 那如果你們的網站線上是https,那麼可能會報告安全警告,有的瀏覽器甚至無法正常載入頁面。如果你直接寫成https,要知道,本地開發可是http啊...
下面的內容是來自知乎的一些經典回應
好處很多人都答過了。升級 https 當然最能感受到這種好處。我只是補充一個為什麼前人不這麼寫的理由。當然,確實有很多前端並不知道這種寫法。不過,就算知道也很可能無法這麼寫。因為UC 瀏覽器的許多較早版本不支援這種寫法,會把//a.b/ 直接理解為/a.b/,也就是說,如果你在http://example.com 的頁面裡寫了//example -cdn.net/static-file 的位址,UC 實際存取的是http://example.com/example-cdn.net/static-file 。 UC 過去的市佔率大家是知道的。所以…
一看你就沒做過「全站 HTTPS 升級改造」。我給全站做 HTTPS 升級的時候,真的很想把寫 http:// 的人砍死。尤其是資料庫裡的連結和 JS 裡拼接出來的 url。期間用了各種正則,還要人工查證。奈何寫 http:// 的程式設計師太多,只能作罷。有人還在留言裡問原因,原因就是如果你全寫 //,我就不用改造資料庫裡的資料和原始碼了,直接升級 https 就行了。你可能會說https 改造這種事情很少發生吧,巧了,我在騰訊和阿里都遇到了https 改造ಥ_ಥ 而且在阿里的時候我要負責1688 整站(個別部門自行改造)的前端代碼改造(不只是HTML,還有CSS 、JS、Velocity 模板等!有的前端還直接在 JS 寫 http,沿用一下目前頁面的協定你會死啊?
還有的前端用正規判斷 url 時居然只接受 http:// 和 https:// 不接受 //,真的沒常識。太多程式設計師,太智障了。也有可能是因為他們沒聽過 HTTPS 而已。如果你還不明白,我就問你幾個問題:如果你用 http:// ,那你就是預設目前頁面是 http 協定了,你一個前端憑什麼決定目前頁面的協定?難道你不知道 http 連結在 https 頁面會報錯啊?你應該沿用目前頁面的協議,所以你要寫//如果你用https://,也是一樣的問題,你怎麼知道三年後會不會出現一個httpshe://,難道到時候你再全部改成httpshe:// ?不要做任何明顯是錯誤的假設!你根本就不知道目前頁面會用什麼協定打開!所以你要用 // 啊!類似的錯誤假設還有很多,例如許多中國程式設計師都以為電話號碼只含數字和括號,不含字母。真的是這樣嗎?
有人說全域替換不就完了嗎?舉例吧,假設淘寶要升級https於是你將http:// 全部替換成//第一個bug:你把 替換成了 ,然而當時http://tmail.com 還不支持https於是你將一定範圍內的域名替換,http://(taobao|taobao2|taobao3).com 替換成//$1.com第二個bug:有些JS 是這樣寫的url = "http://" + location.hostname + '/' + path,還有寫JS 是這樣寫的/^http:\/\ //.test(input)。你說這個就沒法用正則了,在所有 JS 裡全域搜尋 http 然後人工審查吧。你知道淘寶有多少 JS 檔案嗎… 而且這些檔案是快取十年的…就算你改了,也不一定能更新。而一旦改錯了,影響用戶下單,馬雲損失一個億你賠得起嗎?第三個 bug:有些資料根本不在程式碼裡,在資料庫裡,例如 user.image 的值是 http 開頭的。於是你將user.image 寫成user.image.replace('http://', '//') 或是你直接改資料庫裡的資料(當資料量很大的時候,這基本上是不可能的)第四個bug:你忘了改nginx、crossdomain 裡面的網域第五個bug:你忘了改配置系統裡面的base_url第六個bug:你的https 頁面嵌入了一個外部的http iframe…你就哭吧,這很難解決,運氣好直接改成// (外部支援https 即可),運氣不好就要改頁面邏輯了。第 N 個 bug…HTTPS 升級就是髒活累活,你說簡單你來做,你開始做就知道牽連的地方有多少了。最好的方案還是把協議做成很容易變更的方式,例如遵循當前頁面,或者用變量,反正寫死 http:// 肯定不好。有些程式設計師寫程式碼的時候,明明知道有 HTTPS 卻不兼容,心理想著「反正我在這家公司待兩年就走了,HTTPS 至少還有三年呢」然後就寫出了垃圾程式碼。
越來越多的開發者,在連結檔案時,採用//來取代http://,即如< a href="http://jb51.net ……一般寫為< a href = " //http://jb51.net……,這跟傳統帶http有什麼不同?
原本你的網站是http的,所有的src都是http開頭,以為遭到狗屎運營商大量劫持,在你的頁面塞了一大堆少兒不宜/和單純廣告的內容的時候,有人告訴你替換https可以改善這個問題,那麼這個時候你就知道之前的src和ajax寫得//而不是http://是當初多麼明智的決定。 。 。
逐浪CMS官方
隨著越來越多開源和雲端平台的湧現以及SSL協定的廣泛導入(如逐浪CMS已經全面啟用了SSL協議支援),人們在進行開發時必須面對http協議的選擇和識別。眾所周知,過多的ssl引用,可能會造成普通網站的效率低下,但我們不能為此再去重新設計一個純SSL版本。表現在開源程式庫上,一般平台都同時提供SSL版和非SSL版。如這兩個函式庫:https://code.z01.com/js/jquery-3.2.1.slim.min.jshttp://code.z01.com/js/jquery-3.2.1.slim.min. js其引用效果是一致的。於是開發者們直接用"//網址/文件"方法來取代前面的協議,使其自動識別。即具體是SSL協議還是普通http協議,交給瀏覽器去自動識別並自動與當前站點匹配,從而實現最佳的安全請求和最高效的加載方法。概言之,這是一種開發方法和開發思維,雲端運算的web與行動開發日益壯大。
相關建議:
thinkPHP 發展 ( http://w2ks.com)
#以上是用 // 代替 的好處的詳細內容。更多資訊請關注PHP中文網其他相關文章!