域名、瀏覽器、HSTS和HTTPS的關係
1.瀏覽器的轉換:
大家可以找一個瀏覽器試驗一下,我用的是谷歌的chrome瀏覽器,當你在位址列輸入 baidu.com,然後你再按回車,你發現了什麼? 對,位址列已經把地址自動轉換為 https://www.baidu.com了。這種第一種可能是伺服器的重定向導致的,第二種百度的實現方式的通過返回 重新整理元資訊 <meta http-equiv="refresh" content="0";url=http://www.baidu.com/">,還有其他的,我就不是特別瞭解了。如果大家知道,可以評論裡面教教小弟。
2.域名:
baidu.com和www.baidu.com是兩個完全不同的域名,前者是二級域名,後者是三級域名。就是說其實後者是前者的子域名,之所以會發生跳轉,只是百度財大氣粗把兩個域名都買下來了。其實網址還有一個根域,就是最後會有一個.,但是通常都會省略的。ipv4有8臺根伺服器,主根伺服器在美國,輔助根伺服器其他國家也有分佈。ipv6有3臺主根伺服器,分別部署在中日美,輔助根伺服器的部署感興趣的可以網上查一下。三級域名的解析就可以由百度自己來實現了。
3.域名的解析過程:
域名的解析是通過DNS來解析的,它是按照層級關係進行解析的。比如百度,他會先解析.com的一級域名對應的地址,然後再來到二級域名baidu.com,對他進行解析。注意這個時候就會跳到百度自己的dns上面,因為大公司都會有能力架構自己的dns系統,之後百度就可以通過cdn技術來為使用者提供鞥更好的服務了。具體cdn的工作原理以後我有時間還會寫一篇部落格的。
4.為什麼域名前面要加上www?
以www.baidu.com為例,中間的baidu是公司的拼音(聽說是來自眾裡尋他千百度,不知道真假),後面的com代表這是一個商業的網站,還有想cn、gov、net都可以作為字尾。字尾是屬於頂級域名,理論上是可以自定義的,但是需要向域名
www的英文是worldwideweb,翻譯過來就是全球資訊網。他的含義當年定義為它是基於html超文字標記語言和http傳輸協議為基礎的提供的一種網頁服務。但是現在科技迅猛發展,他還有實際存在的意義嗎?答案是肯定的,只是和以前的作用不同罷了。現在一個域名後面有很多臺伺服器支撐,也不需要通過字首來確定提供服務的種類了。現在閘道器可以做到上述的要求了,具體我以後也會學習並分享。現在使用只是為了更加易與人們理解罷了。就像csdn的字首就是blog,代表部落格服務的。字首是可以自定義的。
5.域名跳轉帶來的安全問題
瀏覽器預設是以http的方式進行通訊的,那如果我的網站升級為了https後我該如何讓瀏覽器發起https請求呢?第一種方式就是在niginx上配置重定向301(永久重定向,瀏覽器會快取,快取時間不定,使用者可以手動清除)或者302暫時重定向狀態碼返回給瀏覽器。但是如果這樣總會在不定的時間內瀏覽器會發送一次http明文請求,這時候如果有居心叵測的人就可以攔截你的http請求,造成安全問題。
6.HSTS
hsts的全稱是http嚴格傳送協議,解釋為了解決上述問題。通過這個協議,伺服器可以在返回頭加上
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload] 那麼瀏覽器就會這個進行解析。
max-age:這個是代表有效時間的意思,就是這段時間內瀏覽器都會預設直接發起https請求。如果你每次都會返回這個頭部的話,這個時間會一直累加。但是有個問題需要注意,如果沒有使用hsts的網站,你的證書出現了問題,那麼瀏覽器會給使用者警告,但是使用者可以忽略警告繼續訪問你的網站,但是如果你啟用了hsts協議,那麼瀏覽器會警告使用者並且會禁止使用者繼續訪問你的網站。所以這個值得設定要小心。
includeSubDomains:這個意思就是包含子域名的意思。
preload:這個引數是可選的,這裡可以填寫自己的其他網址加入瀏覽器的內建列表。這個下面再講。
7.繼續進行防護,瀏覽器內建列表。
即使啟用了hsts,那麼瀏覽器至少還會發送一次http請求,這個請求還是有可能被劫持。有沒有一種方法可以讓瀏覽器直接發起https請求呢。可以,就是上面的可選引數就可以把網址加入到內建列表裡面,這個列表是google維護的,其他的一些瀏覽器也會支援這個列表。除了上面的方法還可以通過HSTS Preload List的官網進行申請。這個東西可不是隨便申請的。他需要你符合下面的規範才可以申請
1.具備一個有效的證書
2.在同一臺主機上提供重定向響應,以及接收重定向過來的HTTPS請求
3.所有子域名均使用HTTPS
4.在根域名的HTTP響應頭中,加入HSTS Header,並滿足下列條件:
過期時間最短不得少於18周(10886400秒)
必須包含includeSubDomains
引數
必須包含preload
引數 摘抄自(https://www.jianshu.com/p/caa80c7ad45c)
谷歌瀏覽器可以在chrome://net-internals/#hsts查詢,我查了國內的大型網站都加這個內建列表了。
最後一句話,有錯誤的話換用大家指正。