HTTP學習(三)關於 URL 中協議的省略


Google HTML/CSS 代碼風格指南,里面有很多值得借鑒的地方

其中第一條說道,HTML 和 CSS 代碼中引用的圖片、媒體、CSS 和 JS 文件中的 URL 都可以去掉協議部分(http: 和 https:),比如

<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>

<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>

都可以換成:

<script src="//www.google-analytics.com/ga.js" type="text/javascript"></script>

只要是使用 httphttps 這兩種協議都可以省略。原因是可以節省一點文件體積(當然只是那么一點點),另外一個原因 Google 說是可以解決混合內容的問題。起初我對這個第二點不是很了解,所以特意搜索了下。最后從 Paul Irish 的一篇文章找到答案,鏈接在文后。文章是兩三年前寫的,老外研究問題總是比我們要早啊。

以 // 開頭的叫做相對URL(protocol-relative URL),相關的標准可以看 RFC 3986 Section 4.2,內容不是一般的長估計大家也沒耐心去看吧。總之瀏覽器遇到相對 URL,則會根據當前的網頁協議,自動在 // 前面加上相同的協議。如當前網頁是 http 訪問,那么所有的相對引用 // 都會變成http://https 同理。如果你在本地查看,協議就會變成 file://

所以,如果省略協議,就需要保證引用的外部資源也采用和網頁相同的協議,或者保證資源可以同時通過 http 和 https 訪問。經過 StackOverflow 網友測試,這種用法幾乎所有的瀏覽器都能支持,只有在 IE7/8 下會有一點小問題,就是通過相對 URL 引用的 CSS 文件(無論 <link> 或 @import)會被下載兩遍。所以對性能有一點影響。

至於 Google 提到的混合內容問題,其實是指IE有時會彈出的一個警告框:

安全警告

這個框想必大家也都見過。通常是在瀏覽 https 網頁的時候出現,原因是網頁里引用了 http 協議的外部資源,由於 http 被認為是不安全的,IE 才會給出提示。如果引用的時候寫成相對 URL,瀏覽器就會自動采用 https 協議下載,這樣就解決了問題。

所以,我們平時寫代碼還是可以放心使用相對 URL 的,寫博客的大概很少開 https,當然做項目的就例外了。如果你引用的資源里有 https 協議的就特別處理一下,或者只要 http 也能訪問到資源就可以。我看了下國內的站點這么用的還不多,有一次看到百度音樂這么用過。不過 Google 很多站點都已經是這樣的寫法了。

轉自:關於 URL 中協議的省略

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM