淺析url+HTTP

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

  • 讀取路徑:
  1. 路徑帶查詢參數(shù):request.url

  2. 純路徑:path

  3. 只有查詢參數(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 可以更好的理解以上知識:

我的一個github上的server.js

3. 域名、IP、和端口

3.1 IP

IP 全稱為Internet Protocol 它主要約定了兩件事情:

  1. 如何ing為一臺設備

  2. 如何封裝數(shù)據(jù)報文,與其他設備交流

只要在互聯(lián)網(wǎng)中,你就至少有一個IP。IP又分為內(nèi)網(wǎng)和外網(wǎng),由路由器溝通內(nèi)外網(wǎng)。

如何獲得外網(wǎng)IP:

  1. 從電信租用寬帶

  2. 買個路由器,然后用電腦或手機連接路由器廣播出來的無線wifi

  3. 只要路由器連接上電信的服務器,那么路由器就會有一個外網(wǎng)IP,這就是你在互聯(lián)網(wǎng)中的地址,如 14.17.32.211

  4. 但是如果重啟路由器,那么你很可能被重新分配到一個外網(wǎng)IP,也就是說你爹路由器沒有固定的外網(wǎng)IP

  5. 如果你的路由器的外網(wǎng)IP是 14.17.32.222 那么你的手機和電腦的IP又是什么呢?答案是內(nèi)網(wǎng)IP。

  6. 查看外網(wǎng)IP可以登錄 http://ip138.com 查看

如何獲得內(nèi)網(wǎng)IP:

  1. 路由器會在你家創(chuàng)建一個內(nèi)網(wǎng),內(nèi)網(wǎng)中的設備用內(nèi)網(wǎng)IP,一般來說這個格式是 192.168.xxx.xxx

  2. 一般路由器會給自己分配一個好記的內(nèi)網(wǎng)IP,如:192.168.1.1

  3. 然后路由器會給每一個內(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.comxiedaimala.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=hi

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版面看到,因為錨點不會傳給服務器,他只跟瀏覽器有關。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 如何做到表揚孩子有感而發(fā) 第一就是要找到感覺順位,可以通過切換不同的角度,不同的時空,不同的突破口入手,先讓自己的...
    自然梅語趙梅閱讀 1,061評論 2 4
  • 第一次洗手做羹湯,雖然都屬于熱一下就好了的,但是也是我用心做了呢~( ̄() ̄) 王薇清野蠻生長!
    王薇清閱讀 211評論 0 0
  • “不過,這樣我又回到了原點,”小米長吸一口氣,“如果限制閱讀的時間的話,那么剩余時間做什么呢?我目前腦袋里面又一片...
    一葉愛成長愛游戲閱讀 268評論 0 3

友情鏈接更多精彩內(nèi)容