補充:URL格式
url主要組成:資源類型吼句,存放資源的主機域名捅彻,存放資源的文件名
url語法:
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
瀏覽器運行過程詳解:
第一步:瀏覽器檢查url格式是否正確
若輸入的url格式或者協(xié)議不正確弹惦,那么瀏覽器會將地址欄中輸入的文字傳給默認(rèn)的搜索引擎搜索(比如我默認(rèn)的搜索引擎是百度澳骤,那么就給百度搜索金矛,不管我在url欄中輸入什么滴肿,英文還是數(shù)字還是中文鹊漠,只要url協(xié)議不正確几缭,那么就將我輸入的內(nèi)容默認(rèn)移植到百度搜索框中搜索想许,以wd=haoxueshen這樣的id和值對應(yīng)方式進行搜索伶授。換句話說,我將haoxueshen改成“優(yōu)酷”,就等于我在用百度搜索優(yōu)酷流纹。這個wd是百度的搜索欄id糜烹,我看過了。)同時漱凝,瀏覽器會在我們的url后面加上一段特殊的字符疮蹦,表示搜索來自特定的瀏覽器。
如果茸炒,我們輸入的是正確的url地址呢愕乎?
如果輸入的是正確的url,那么瀏覽器在發(fā)出http鏈接請求之前壁公,會先檢查自己的預(yù)加載HSTS(http嚴(yán)格傳輸安全)列表感论,這個列表里面記錄了哪些網(wǎng)站是需要https連接的。
根據(jù)這張列表紊册,瀏覽器就向需要https連接的網(wǎng)站發(fā)送https請求笛粘。而不在這張表內(nèi)的,瀏覽器就發(fā)送http請求湿硝。不過薪前,現(xiàn)在都鼓勵用https鏈接,這樣更安全关斜,而且支持用https鏈接訪問的網(wǎng)站示括,在搜索引擎中的排名都會靠前。
但是痢畜,有的網(wǎng)站支持https連接垛膝,可是卻不在這張表中鳍侣,那么瀏覽器第一次發(fā)送的訪問請求還是http,這樣吼拥,若是攻擊者抓住這第一次的訪問請求倚聚,劫持了用戶,那么凿可,后面的訪問就都GG了惑折。看攻擊者怎么利用這次成功的劫持了枯跑。有個攻擊專門針對這個缺陷的惨驶,叫downgrade attack 降級攻擊。
補充:若想避免這種問題敛助,那么用戶首先得用品牌的瀏覽器粗卜,比如谷歌,火狐纳击。其次续扔,網(wǎng)站負責(zé)人可以去https://hstspreload.appspot.com/ ? ?這個網(wǎng)站提交申請,申請將自己的域名加入HSTS列表焕数。通過審核测砂,就會加入。
最后百匆,自己可以在谷歌瀏覽器上加上相應(yīng)的域名HSTS地址。在谷歌的chrome://net-internals/#hsts這個網(wǎng)址上呜投,可以手動給自己的瀏覽器添加HSTS網(wǎng)址加匈。這里還可以查到自己谷歌瀏覽器中的DNS緩存。
第二步:DNS地址解析查詢
若上面的url沒問題仑荐,HSTS也查詢了雕拼,知道用http去訪問還是https去訪問了,那么粘招,下面就是找真正的域名IP了啥寇,只有知道IP,才能利用路由到達目的地洒扎。
首先辑甜,先看瀏覽器自己的DNS緩存表,里面有對應(yīng)的域名IP關(guān)系袍冷。如圖:
瀏覽器自己根據(jù)這張表磷醋,去找目的地址。若是瀏覽器訪問的域名不在這張緩存表中胡诗,那么瀏覽器就會調(diào)用某個函數(shù)(gethostbyname庫函數(shù))進行查詢邓线,先看域名能否在本地HOST找到淌友,若在緩存中和本地都找不到,那就向DNS服務(wù)器發(fā)送請求骇陈。
那么震庭,這里又存在一個問題,DNS服務(wù)器是否和我們在同一個內(nèi)網(wǎng)你雌?若是器联,先看arp緩存表,若有匪蝙,直接找主籍,若沒有,直接arp逛球,得到DNS服務(wù)器MAC地址,然后和DNS服務(wù)器通信千元。
若不是同一個內(nèi)網(wǎng),那么就直接arp網(wǎng)關(guān)颤绕,向網(wǎng)關(guān)發(fā)送訪問DNS服務(wù)器的請求幸海。然后由網(wǎng)關(guān)去路由、跳轉(zhuǎn)等一系列路由奥务,去找dns服務(wù)器物独。若是DNS服務(wù)器地址設(shè)置錯誤,或者自動獲取錯誤氯葬,那么就沒辦法鏈接DNS服務(wù)器挡篓,自然就無法得到解析網(wǎng)址后的正確IP,就找不到網(wǎng)頁了帚称。所以官研,我們平時發(fā)現(xiàn)QQ能上,但是網(wǎng)頁打不開闯睹,很有可能就是DNS設(shè)置出了問題戏羽。
當(dāng)找到DNS服務(wù)器地址后,數(shù)據(jù)包從udp53端口發(fā)出楼吃,發(fā)給本地DNS服務(wù)器始花,比如是北京的,就發(fā)給北京的本地DNS服務(wù)器孩锡,這個DNS服務(wù)器查詢自己的域名IP表酷宵,有就直接返回,沒有就找根DNS服務(wù)器躬窜,根DNS服務(wù)器依次向下查詢(根據(jù)url格式忧吟,比如是幾級域名等等,總之按照DNS服務(wù)器的一套詳細的查詢方法斩披,最后會返回域名的正確地址)
第三步:套接字溜族,封裝
已經(jīng)得到了目標(biāo)服務(wù)器的IP地址讹俊,以及訪問的端口號(http80,https443),此時煌抒,還處于TCP/IP五層模型中的應(yīng)用層仍劈。瀏覽器會調(diào)用系統(tǒng)庫函數(shù)sock。
補充:套接字
源IP地址和目的IP地址以及源端口號和目的端口號的組合稱為套接字寡壮。其用于標(biāo)識客戶端請求的服務(wù)器和服務(wù)
然后請求進入傳輸層贩疙,進行封裝,接著况既,網(wǎng)絡(luò)層这溅,數(shù)據(jù)鏈路層。棒仍。根據(jù)已經(jīng)知道的目的IP地址開始傳輸
未待完續(xù)
參考文章:按下回車后悲靴,發(fā)生的一切事情