URL的組成部分

URL的組成有:協(xié)議、域名、路徑、查詢參數(shù)、錨點(diǎn)。接下來將依次分析這五部分。
協(xié)議
主要有HTTP協(xié)議和HTTPS協(xié)議,HTTP協(xié)議默認(rèn)使用端口號80, HTTPS協(xié)議默認(rèn)使用端口號443
域名
ip
ip地址是用來定位互聯(lián)網(wǎng)世界中的一臺(tái)設(shè)備,每個(gè)上網(wǎng)的設(shè)備都有自己獨(dú)立的IP地址
IP分為外網(wǎng)IP和內(nèi)網(wǎng)IP

可以用Ping命令查看域名的IP地址

如上圖,域名taobao.com對應(yīng)的IP地址是140.205.220.96
還可以用nslookup查看域名的ip地址:

端口
一臺(tái)服務(wù)器可以提供很多服務(wù),每個(gè)服務(wù)有不同的號碼,這個(gè)號碼就是端口。類似于,在麥當(dāng)勞點(diǎn)餐,有咖啡窗口、快餐窗口、甜品站窗口,只能在咖啡窗口點(diǎn)咖啡、甜品站窗口點(diǎn)甜品。
一臺(tái)機(jī)器可以提供很多不同的服務(wù)
- 80端口:HTTP服務(wù)
- 443端口: HTTPS服務(wù)
- 21端口: FTP服務(wù)
域名
域名是IP的別稱
一個(gè)域名可以對應(yīng)多個(gè)IP, 這叫負(fù)載均衡,防止一臺(tái)機(jī)器無法同時(shí)為大量用戶提供服務(wù)
不同地區(qū)ping taobao.com會(huì)看到不同的ip地址
一個(gè)IP也可以對應(yīng)多個(gè)域名,這叫主機(jī)共享
域名通過 DNS 解析成 IP
當(dāng)你輸入www.baidu.com
chrome瀏覽器會(huì)向電信/聯(lián)通提供的DNS服務(wù)器詢問www.baidu.com對應(yīng)什么IP
然后電信/聯(lián)通會(huì)回復(fù)一個(gè)IP
然后chrome瀏覽器會(huì)向?qū)?yīng)IP地址的80/ 443端口發(fā)送請求
服務(wù)器默認(rèn)用80端口提供HTTP服務(wù)
服務(wù)器默認(rèn)用443端口提供HTTPS服務(wù)
請求內(nèi)容是查看www.baidu.com的首頁
關(guān)于域名的其他知識(shí)
www.baidu.com和baidu.com是不同的域名
- .com是頂級域名
- baidu.com是二級域名(俗稱一級域名)
- www.baidu.com 是三級域名(俗稱二級域名)
- 所以www.baidu.com是baidu.com的子域名
- 例如,github.io是github的域名, userid.github.io是每個(gè)用戶的域名
路徑
如何請求同一服務(wù)器上不同網(wǎng)頁?
用路徑即可
路徑是沒有必要有后綴的
https://developer.mozilla.org/zh-CN/docs/Web/HTML
https://developer.mozilla.org/zh-CN/docs/Web/CSS
查詢參數(shù)
請求同一個(gè)頁面,能得到不同內(nèi)容嗎?
用查詢參數(shù)即可
http://www.baidu.com/s?wd=hello
錨點(diǎn)
同一內(nèi)容,不同位置?
用錨點(diǎn)即可
https://developer.mozilla.org/zh-CN/docs/Web/CSS#教程
錨點(diǎn)不支持中文,會(huì)把中文進(jìn)行編碼
注意!
錨點(diǎn)不會(huì)經(jīng)過服務(wù)器,因?yàn)槭潜镜貎?nèi)容
所以服務(wù)器不會(huì)閱讀井號 # 之后的內(nèi)容,不可以拿這個(gè)傳參數(shù)!
URL舉例
最后我們再來看看URL的不同部分

https默認(rèn)用443端口
所以www.baidu.com 等同于 www.baidu.com:443
curl使用示例
curl -v http://www.baidu.com
整個(gè)過程:
向DNS查詢域名對應(yīng)的IP地址
建立TCP連接,TCP連接建立好之后,開始發(fā)送HTTP請求
下圖中以大于號開始的
GET / HTTP/1.1到 > Accept: /是請求頭

之后服務(wù)器會(huì)發(fā)送回來一個(gè)響應(yīng)
分為響應(yīng)頭和響應(yīng)體
以下內(nèi)容是響應(yīng)頭
- image.png
響應(yīng)體就是HTML頁面
響應(yīng)結(jié)束后,關(guān)閉TCP連接
HTTP請求結(jié)束
