1. url的組成
先舉個具體的url的例子:
https://www.baidu.com/s?wd=hello&rsv_spt=1#5
url的組成包括以下幾點:
協議 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用來獲取內容赘淮,post用來上傳內容俘枫。] + 路徑和查詢參數(所有路徑必須以/開頭) + 協議名/版本
請求頭:
Host:域名或ip+端口號
Accept:表示要接受什么讼载,大部分為text/html
Content-Type:請求體格式
回車(必須寫!T愀邸!)
請求體:
也就是上傳內容。請求體在get請求中一般為空编兄。
2.2 響應
狀態(tài)行:
協議名/版本 + 狀態(tài)碼(常見的狀態(tài)碼有:200表示ok,404表示加載失敗) + 狀態(tài)字符串
響應頭:
Content-type:響應體的格式
回車 (必須寫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
- 設置路徑和查詢參數 直接在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 '內容' 或者 -data '內容' 具體為:
curl -v -D '請求內容' http://127.0.0.1:8888
2.4 用node.js讀取請求
- 讀取請求動詞:
request.method
- 讀取路徑:
路徑帶查詢參數:request.url
純路徑:path
只有查詢參數:query
- 讀取請求頭:
request.headers['Accept']
2.5 用node.js設置響應
- 設置狀態(tài)行的狀態(tài)碼:
response.statusCode=200
- 設置響應頭:
response.setHeader('Content-Type','text/html;charset:utf-8')
- 設置響應體:注意點是包住內容的符號不是引號脯厨,是反引號铅祸。
response.write(`內容`)
2.6 舉例
附上一個server.js 可以更好的理解以上知識:
3. 域名、IP合武、和端口
3.1 IP
IP 全稱為Internet Protocol 它主要約定了兩件事情:
如何ing為一臺設備
如何封裝數據報文临梗,與其他設備交流
只要在互聯網中,你就至少有一個IP稼跳。IP又分為內網和外網盟庞,由路由器溝通內外網。
如何獲得外網IP:
從電信租用寬帶
買個路由器汤善,然后用電腦或手機連接路由器廣播出來的無線wifi
只要路由器連接上電信的服務器什猖,那么路由器就會有一個外網IP票彪,這就是你在互聯網中的地址,如 14.17.32.211
但是如果重啟路由器不狮,那么你很可能被重新分配到一個外網IP降铸,也就是說你爹路由器沒有固定的外網IP
如果你的路由器的外網IP是 14.17.32.222 那么你的手機和電腦的IP又是什么呢?答案是內網IP摇零。
查看外網IP可以登錄 http://ip138.com 查看
如何獲得內網IP:
路由器會在你家創(chuàng)建一個內網推掸,內網中的設備用內網IP,一般來說這個格式是 192.168.xxx.xxx
一般路由器會給自己分配一個好記的內網IP驻仅,如:192.168.1.1
然后路由器會給每一個內網中的設備分配一個不用的內網IP终佛,如你的電腦是192.168.1.2 你的手機是 192.168.1.3
路由器的功能:
路由器有兩個IP,一個內網IP雾家,一個外網IP
內網中的設備可以和互相訪問铃彰,但不能直接反訪外網
內網設備想要訪問外網,就必須通過路由器中轉
外網中的設備可以互相訪問芯咧,但是不能訪問你的內網
外網中的設備想要把內容送到內網牙捉,也必須通過路由器
也就是說內網和外網就像兩個隔絕的空間,無法互通敬飒,路由器就是唯一的聯通點
所以路由器有時候也叫網關
幾個特殊的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端口是留給系統使用的无拗,你有了管理員權限后带到,才有資格使用這些端口
其他端口可以給普通用戶使用,如http-server默認使用8080端口
一個端口被占用英染,你就只能換一個
3.3 域名
域名就是對IP的別稱揽惹。
一個域名可以對應多個IP,這個叫做均衡負載四康,防止一臺機器扛不住
一個IP可以有多個域名搪搏,這個叫做共享主機,窮開發(fā)者才會這么做
ping 命令的使用:
簡單來說闪金,「ping」是用來探測本機與網絡中另一主機之間是否可達的命令疯溺,如果兩臺主機之間ping不通,則表明這兩臺主機不能建立起連接哎垦。ping是定位網絡通不通的一個重要手段囱嫩。
就是我們玩游戲會有個ping,表示延遲漏设,如果ping值越低墨闲,說明你和服務器的連接越好。
DNS: 連接域名和IP
但你輸入一個域名后愿题,你的chrome瀏覽器會向電信或者聯通的DNS服務器詢問改域名對應了什么IP
電信或聯通會回答一個IP损俭,具體過程很復雜,不研究
然后才會向對應IP的443或者80端口發(fā)送請求
請求內容是查看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. 查詢參數
通過查詢參數蝴蜓,可以做到請同一個頁面鞭缭,訪問不同內容,如:
http://www.baidu.com/s?wd=hello
6. 錨點
通過錨點可以做到抛猖,訪問相同內容格侯,出現在不同位置,如:
https://developer.mozilla.org/zh-Cn/docs/Web/CSS#參考書
https://developer.mozilla.org/zh-Cn/docs/Web/CSS#教程
注意:
錨點看起來有中文财著,實際不支持中文
錨點無法在Network版面看到联四,因為錨點不會傳給服務器,他只跟瀏覽器有關撑教。