1. url的組成
先舉個具體的url的例子:
https://www.baidu.com/s?wd=hello&rsv_spt=1#5
url的組成包括以下幾點:
協(xié)議 https://
域名或IP加上端口 www.baidu.com:433 端口為433這里省略了
路徑 /s
查詢字符串 ?wd=hello&rsv_spt=1
錨點 #5
2. HTTP基本概念
HTTP 全稱為 HyperText Transfer Protocol
2.1 請求
請求行:
請求動詞[(get/post/put/patch/delete) 其中get用來獲取內(nèi)容,post用來上傳內(nèi)容。] + 路徑和查詢參數(shù)(所有路徑必須以/開頭) + 協(xié)議名/版本
請求頭:
Host:域名或ip+端口號
Accept:表示要接受什么,大部分為text/html
Content-Type:請求體格式
回車(必須寫?。。。?/p>
請求體:
也就是上傳內(nèi)容。請求體在get請求中一般為空。
2.2 響應
狀態(tài)行:
協(xié)議名/版本 + 狀態(tài)碼(常見的狀態(tài)碼有:200表示ok,404表示加載失敗) + 狀態(tài)字符串
響應頭:
Content-type:響應體的格式
回車 (必須寫?。。。?/p>
響應體:
也就是下載內(nèi)容。
2.3 用curl構造請求
先來一個最簡單的請求:
curl -v http://127.0.0.1:8888
- 設置請求動詞 如把請求動詞改為POST,只需要加上 -X -POST,具體為:
curl -v -X -POST http://127.0.0.1:8888
- 設置路徑和查詢參數(shù) 直接在curl后面加 具體為:
curl -v -X -POST http://127.0.0.1:8888/xx?wd=hi
- 設置請求頭 -H 'Name:value' 或者 -header 'Name:value' 具體為:
curl -v -X -POST -H 'Accept:text/html' -H 'Content-Type:text/plain;charset=utf-8' http://127.0.0.1:8888/xx?wd=hi
- 設置請求體 -D '內(nèi)容' 或者 -data '內(nèi)容' 具體為:
curl -v -D '請求內(nèi)容' http://127.0.0.1:8888
2.4 用node.js讀取請求
- 讀取請求動詞:
request.method
- 讀取路徑:
路徑帶查詢參數(shù):request.url
純路徑:path
只有查詢參數(shù):query
- 讀取請求頭:
request.headers['Accept']
2.5 用node.js設置響應
- 設置狀態(tài)行的狀態(tài)碼:
response.statusCode=200
- 設置響應頭:
response.setHeader('Content-Type','text/html;charset:utf-8')
- 設置響應體:注意點是包住內(nèi)容的符號不是引號,是反引號。
response.write(`內(nèi)容`)
2.6 舉例
附上一個server.js 可以更好的理解以上知識:
3. 域名、IP、和端口
3.1 IP
IP 全稱為Internet Protocol 它主要約定了兩件事情:
如何ing為一臺設備
如何封裝數(shù)據(jù)報文,與其他設備交流
只要在互聯(lián)網(wǎng)中,你就至少有一個IP。IP又分為內(nèi)網(wǎng)和外網(wǎng),由路由器溝通內(nèi)外網(wǎng)。
如何獲得外網(wǎng)IP:
從電信租用寬帶
買個路由器,然后用電腦或手機連接路由器廣播出來的無線wifi
只要路由器連接上電信的服務器,那么路由器就會有一個外網(wǎng)IP,這就是你在互聯(lián)網(wǎng)中的地址,如 14.17.32.211
但是如果重啟路由器,那么你很可能被重新分配到一個外網(wǎng)IP,也就是說你爹路由器沒有固定的外網(wǎng)IP
如果你的路由器的外網(wǎng)IP是 14.17.32.222 那么你的手機和電腦的IP又是什么呢?答案是內(nèi)網(wǎng)IP。
查看外網(wǎng)IP可以登錄 http://ip138.com 查看
如何獲得內(nèi)網(wǎng)IP:
路由器會在你家創(chuàng)建一個內(nèi)網(wǎng),內(nèi)網(wǎng)中的設備用內(nèi)網(wǎng)IP,一般來說這個格式是 192.168.xxx.xxx
一般路由器會給自己分配一個好記的內(nèi)網(wǎng)IP,如:192.168.1.1
然后路由器會給每一個內(nèi)網(wǎng)中的設備分配一個不用的內(nèi)網(wǎng)IP,如你的電腦是192.168.1.2 你的手機是 192.168.1.3
路由器的功能:
路由器有兩個IP,一個內(nèi)網(wǎng)IP,一個外網(wǎng)IP
內(nèi)網(wǎng)中的設備可以和互相訪問,但不能直接反訪外網(wǎng)
內(nèi)網(wǎng)設備想要訪問外網(wǎng),就必須通過路由器中轉(zhuǎn)
外網(wǎng)中的設備可以互相訪問,但是不能訪問你的內(nèi)網(wǎng)
外網(wǎng)中的設備想要把內(nèi)容送到內(nèi)網(wǎng),也必須通過路由器
也就是說內(nèi)網(wǎng)和外網(wǎng)就像兩個隔絕的空間,無法互通,路由器就是唯一的聯(lián)通點
所以路由器有時候也叫網(wǎng)關
幾個特殊的IP
127.0.0.1 表示自己
localhost同過host制定自己 host文件的路徑為 C:\Windows\System32\drivers\etc 可以通過在里面加入一行127.0.0.1 xxx ,讓xxx稱為127.0.0.1 的別稱
0.0.0.0 不表示任何設備
3.2 端口 port
一臺機器可以提供不同的服務,其中:
要提供HTTP服務最好用80端口
要提供HTTPS服務最好用443端口
要提供FTP服務用21端口
一共有65535個端口(基本夠用)
端口的使用規(guī)則:
0到1023端口是留給系統(tǒng)使用的,你有了管理員權限后,才有資格使用這些端口
其他端口可以給普通用戶使用,如http-server默認使用8080端口
一個端口被占用,你就只能換一個
3.3 域名
域名就是對IP的別稱。
一個域名可以對應多個IP,這個叫做均衡負載,防止一臺機器扛不住
一個IP可以有多個域名,這個叫做共享主機,窮開發(fā)者才會這么做
ping 命令的使用:
簡單來說,「ping」是用來探測本機與網(wǎng)絡中另一主機之間是否可達的命令,如果兩臺主機之間ping不通,則表明這兩臺主機不能建立起連接。ping是定位網(wǎng)絡通不通的一個重要手段。
就是我們玩游戲會有個ping,表示延遲,如果ping值越低,說明你和服務器的連接越好。
DNS: 連接域名和IP
但你輸入一個域名后,你的chrome瀏覽器會向電信或者聯(lián)通的DNS服務器詢問改域名對應了什么IP
電信或聯(lián)通會回答一個IP,具體過程很復雜,不研究
然后才會向?qū)狪P的443或者80端口發(fā)送請求
請求內(nèi)容是查看xxx(你輸入的域名)的首頁
nslookup: 你可以通過在命令行輸入:
nslookup baidu.com
來查看百度的IP。
域名的分級:
com/cn/org/io等都是頂級域名。com的全稱是company,org是指非營利性組織。
github.io是二級域名(俗稱一級域名)
username.github.io是三級域名(俗稱二級域名)
只是github.io把它的子域名們免費提供給用戶使用
二級域名與三級域名之間是父子關系,所以說 www.xiedamala.com 與 xiedaimala.com 可以是一家公司,也可以不是。
4.路徑
通過路徑,可以做到訪問相同域名,但是請求不同頁面,如:
https://developer.mozilla.org/zh-Cn/docs/Web/HTML
https://developer.mozilla.org/zh-Cn/docs/Web/CSS
5. 查詢參數(shù)
通過查詢參數(shù),可以做到請同一個頁面,訪問不同內(nèi)容,如:
http://www.baidu.com/s?wd=hello
6. 錨點
通過錨點可以做到,訪問相同內(nèi)容,出現(xiàn)在不同位置,如:
https://developer.mozilla.org/zh-Cn/docs/Web/CSS#參考書
https://developer.mozilla.org/zh-Cn/docs/Web/CSS#教程
注意:
錨點看起來有中文,實際不支持中文
錨點無法在Network版面看到,因為錨點不會傳給服務器,他只跟瀏覽器有關。