時間:2019-03-20
作者:Dobby_Kim
內(nèi)容前瞻:
1:什么是互聯(lián)網(wǎng)?什么是萬維網(wǎng)?
2:URI,URL,URN是什么?有什么區(qū)別?
3:一個完整的 URL 是由哪幾個部分組成的?
4:什么是域名?什么是 DNS?DNS域名解析過程,nslookup及 ping命令的使用
5:什么是 HTML?
6:什么是HTTP協(xié)議?
7:服務(wù)器與客戶端,請求和響應(yīng)。Chrome開發(fā)者工具及 curl命令的使用
8:常見 HTTP請求方式介紹,GET和 POST ?
9:常見 HTTP狀態(tài)碼介紹
10:什么是HTTPS協(xié)議?HTTP 和 HTTPS協(xié)議有什么區(qū)別?
1:什么是萬維網(wǎng)?
上圖由三個醒目的"W"組成,WWW即萬維網(wǎng)。
萬維網(wǎng)(World Wide Web) 亦被成為"Web" 或 "WWW"。
提到了萬維網(wǎng) 就不得不提到互聯(lián)網(wǎng)(Internet) 以及 二者的關(guān)系。
真正意義上的互聯(lián)網(wǎng)創(chuàng)始于1983年,有些人則認為是1969年。我個人比較傾向于1983年這個說法。
1969年美國國防部創(chuàng)建了第一個分組交換網(wǎng) APPANET,而1983年TCP/IP協(xié)議成為了APPANET上的標(biāo)準(zhǔn)協(xié)議,使得所有使用TCP/IP協(xié)議的計算機都能利用互連網(wǎng)(注意是互連網(wǎng),網(wǎng)絡(luò)由節(jié)點和鏈路組成,而網(wǎng)絡(luò)之間通過路由就可以形成更大的網(wǎng)絡(luò),這個更大的網(wǎng)絡(luò)就叫做互連網(wǎng))進行相互通信,于是人們將1983年作為互連網(wǎng)的誕生時間。
internet(小寫i開頭)被稱作為互連網(wǎng),它泛指由多個計算機網(wǎng)絡(luò)互連而成的計算機網(wǎng)絡(luò)。
而Internet(大寫I開頭)則被成為互聯(lián)網(wǎng)或因特網(wǎng)則是指全球最大的,開放的,由眾多網(wǎng)絡(luò)相互連接而成的互聯(lián)網(wǎng),它采用TCP/IP協(xié)議族作為通信的規(guī)則。
簡單的來說,可以將互聯(lián)網(wǎng)理解為由多個計算機,軟件,路由,電纜等組成的網(wǎng)絡(luò)與網(wǎng)絡(luò)之間通過TCP/IP協(xié)議族實現(xiàn)數(shù)據(jù)電子傳輸?shù)娜蚧模_放的網(wǎng)絡(luò)集合體。
說到這里,就不得不說下,在萬維網(wǎng)誕生之前,互聯(lián)網(wǎng)能做些什么了。
互聯(lián)網(wǎng)在當(dāng)時主要的功能有:郵件,以及ftp文件下載。包括現(xiàn)在的即時通訊軟件如QQ都是基于互聯(lián)網(wǎng)的概念發(fā)展出的產(chǎn)物。本文不會拓展這些知識點(實際上我不會,日后學(xué)習(xí)了再補充)
那么什么是萬維網(wǎng)呢?
萬維網(wǎng)成立的時間為1994年,(此文創(chuàng)建日期為2019年,萬維網(wǎng)才僅僅25歲)通常我們所說的網(wǎng)上沖浪的那個"互聯(lián)網(wǎng)",實際上是萬維網(wǎng)。正因為有了萬維網(wǎng),才會有現(xiàn)在五彩繽紛的網(wǎng)絡(luò)世界。
萬維網(wǎng)的創(chuàng)始人為伯納斯·李,他創(chuàng)造了萬維網(wǎng),寫了世界上第一個瀏覽器,同時也寫了世界上第一個網(wǎng)頁。附上維基百科鏈接:伯納斯.李
萬維網(wǎng)是一個由許多互相連接的"超文本"組成的系統(tǒng),通過互聯(lián)網(wǎng)進行訪問,在這個系統(tǒng)中,每一個有用的事物都稱為一樣"資源",并且由一個全局的"統(tǒng)一資源標(biāo)識符"所標(biāo)識著,這些資源通過"超文本傳輸協(xié)議"傳送給用戶,而用戶則通過點擊鏈接來獲取這些資源。
這張圖中 http 所表示的就是上文提到過的"超文本傳輸協(xié)議"即 (Hypertext Transfer Protocol)它是萬維網(wǎng)的基本協(xié)議,而TCP/IP則是傳輸層的協(xié)議,它的1983年被立為互聯(lián)網(wǎng)的標(biāo)準(zhǔn)協(xié)議,主要解決的問題是數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸, HTTP是應(yīng)用層的協(xié)議,主要解決如何包裝數(shù)據(jù) 。TCP/IP協(xié)議和HTTP協(xié)議的關(guān)系是傳輸層與應(yīng)用層的關(guān)系,傳輸數(shù)據(jù)使用TCP/IP協(xié)議,但如果沒有應(yīng)用層,用戶便無法識別數(shù)據(jù)的內(nèi)容,所以要想使數(shù)據(jù)的傳輸變得有意義就要使用到應(yīng)用層的協(xié)議。在還沒有萬維網(wǎng)之前人們使用互聯(lián)網(wǎng)發(fā)送郵件,應(yīng)用層的協(xié)議為SMTP,使用互聯(lián)網(wǎng)下載傳輸文件 使用的協(xié)議為 FTP,直到出現(xiàn)了萬維網(wǎng),出現(xiàn)了繽紛多彩的網(wǎng)頁世界。萬維網(wǎng)的基本協(xié)議為http協(xié)議,這是一個同SMTP,FTP一樣在應(yīng)用層的協(xié)議
也就是說 :
萬維網(wǎng)是基于互聯(lián)網(wǎng)之上發(fā)展出的產(chǎn)物 ,萬維網(wǎng)只是互聯(lián)網(wǎng)所能提供的服務(wù)之一,是一項靠互聯(lián)網(wǎng)運行的服務(wù)。
2:URI,URL,URN是什么?有什么區(qū)別?
回顧上文對萬維網(wǎng)的定義:
萬維網(wǎng)是一個由許多互相連接的 "超文本" 組成的系統(tǒng),通過互聯(lián)網(wǎng)進行訪問,在這個系統(tǒng)中,每一個有用的事物都稱為一樣"資源",并且由一個全局的"統(tǒng)一資源標(biāo)識符"所標(biāo)識著,這些資源通過"超文本傳輸協(xié)議"傳送給用戶,而用戶則通過點擊鏈接來獲取這些資源。
上文簡單介紹了萬維網(wǎng)和互聯(lián)網(wǎng)的聯(lián)系。本小節(jié)將簡單介紹URI,URL,URN的概念與區(qū)別。
在瀏覽器中,我們通過輸入網(wǎng)址訪問到某某網(wǎng)站的頁面。那么,有沒有想過我們是如何獲取到這樣一個頁面的呢?這個過程其實很復(fù)雜,但是可以知道,我們"獲取"頁面的這樣一個過程 本質(zhì)是通過使用瀏覽器下載了這個頁面。那么是從哪里下載的呢?答案是服務(wù)器,而下載的這個頁面 即是 服務(wù)器上的"資源"。這個小節(jié)不會介紹獲取資源的過程,重點在于訪問資源的方法:——URI,URL,URN
我在學(xué)習(xí)URI,URL和URN時,因為實在搞不清他們之間的區(qū)別,也上網(wǎng)查閱了很多資料,發(fā)現(xiàn)大多數(shù)能解釋清楚這三個名詞的概念的人很少。
首先要知道的是:
URI:Uniform Resource Identifier 統(tǒng)一資源標(biāo)識符
URL:Uniform Resoure Locator 統(tǒng)一資源定位符 俗稱網(wǎng)址
URN:Uniform Resource Name 統(tǒng)一資源名稱
這里在解釋這幾個抽象的名詞之前我先舉一個例子。
這是一張從百度上找的名片,名片里面是xxx公司 名字假設(shè)是小紅 職位是總經(jīng)理,名片由電話,傳真,手機,以及地址信息組成。
我們將重點放在 小紅這個人的定義 以及 地址的信息上。
小紅這個人的定義是什么呢?或是說小紅是誰?
四川省愛購網(wǎng)xxx公司的總經(jīng)理小紅
小紅所在的地址是什么呢?
四川省清溪路xxx
當(dāng)明確了這幾個內(nèi)容以后,就可以將URI,URL,URN同名片做一個形象的比喻
實際上 這張名片 就等同與URI
小紅的地址 等同于URL
小紅是誰 則等同于URN
URI
URI即統(tǒng)一資源標(biāo)識符 英文為:Uniform Resource Identifier
URI可以進一步分為 URL,URN
參考以下權(quán)威的RFC舉出的例子:
1:ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)
2:http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)
3:ISBN: 9787115275790(3 并非是RFC的例子)
以上三個例子都屬于URI,前兩個例子不僅僅是URI同時也是一個URL,為什么呢?因為它不僅僅是一個標(biāo)識符 而且是一個訪問資源的地址且 遵從某種協(xié)議。當(dāng)然第三個例子是一個URN也說明了 并不是所有的URI就都是一個 URL。總之,URI是一個標(biāo)識符它可能就是一個URL 或 是一個URN-
URL和URN
URL即統(tǒng)一資源定位符 英文為:Uniform Resoure Locator
URL俗稱網(wǎng)址,通過URL你可以去訪問一個資源且可以確定一個唯一的地址
URN則是統(tǒng)一資源名稱 英文為:Uniform Resource Name
通過URN你可以確定一個唯一的資源,但是僅僅是確定而已,如果需要某種途徑去訪問它 還是需要URL
例如:ISBN: 9787115275790 它對應(yīng)的資源是《JavaScript 高級程序設(shè)計(第三版)》
javascript.jpg
綜上所述:
URL 和 URN 是URI的子集
任何東西,只要能夠唯一地標(biāo)識出來,都可以說這個標(biāo)識是 URI 。如果這個標(biāo)識是一個可獲取到上述對象的路徑,那么同時它也可以是一個 URL ;但如果這個標(biāo)識不提供獲取到對象的路徑,而是僅僅作為這個對象的名字那么它就是一個URN
URI,URL,URN的關(guān)系可以表示為:
圖片截取于 轉(zhuǎn)!!URL和URI區(qū)別
3:一個完整的 URL 是由哪幾個部分組成的?
以URL https://www.baidu.com/s?wd=hello&rsv_spt=1#5
為例
- protocol:
protocal即協(xié)議,https是一種協(xié)議也是URL的開頭部分
協(xié)議包括FTP,HTTP,file等等 - hostname:
hostname 即主機名 指存放資源的服務(wù)器的域名系統(tǒng)(DNS)主機名或是IP地址
如www.baidu.com
關(guān)于域名和DNS在后面會有詳細的介紹 - port
port即端口,省略時使用協(xié)議的默認端口 需要知道的幾個端口號為:
ftp協(xié)議默認端口:21
http協(xié)議默認端口:80
https協(xié)議默認端口:443
代理服務(wù)器默認端口:1080 (翻墻)
MySQL 默認端口:3306 - path
path即路徑 由零或多個"/" 符號分隔開的字符串 一般用來表示主機的一個目錄或文件地址 本例中 path為" /s " - query & parameters
如本例中 查詢的單詞為hello
query以?開頭 傳遞 參數(shù)信息;參數(shù)可以為多個 并以 & 分隔開每個參數(shù)名和值以
key=value的傳遞并呈現(xiàn)在url上 - anchor
anchor即錨點 指定了跳轉(zhuǎn)到網(wǎng)頁的哪個位置
如本例中:https://www.baidu.com/s?wd=hello&rsv_spt=1#5
就規(guī)定了跳轉(zhuǎn)到網(wǎng)頁錨點為5的位置
錨點在URL的最后 以#開頭
4:什么是域名?什么是 DNS?DNS域名解析過程,nslookup及 ping命令的使用
在清楚一個完整的URL應(yīng)該包含什么內(nèi)容之后,先拋去協(xié)議不談,我們簡單地談一下域名。
一個完整的URL應(yīng)該包含主機名即hostname
上文對hostname的定義:
hostname 即主機名 指存放資源的服務(wù)器的域名系統(tǒng)(DNS)主機名或是IP地址
這句話聽起來并不是那么好理解,但實際上很簡單
一個完整的URL寫在協(xié)議之后的 是一個域名 或者是一個 IP地址
像www.baidu.com
就是一個域名,而113.116.xx.xx
就是一個IP地址
首先,跑題性地先說一下IP
IP 英文為 Internet Protocol 意思為網(wǎng)絡(luò)之間互連的協(xié)議
也就是為計算機網(wǎng)絡(luò)相互連接進行通信而設(shè)定的協(xié)議
IP 地址 Internet Protocol Address則是用來在網(wǎng)絡(luò)中標(biāo)記一臺電腦的一串32位二進制數(shù)字了
先解釋一下什么是 內(nèi)網(wǎng)IP和外網(wǎng)IP
內(nèi)網(wǎng)IP
簡單來說,內(nèi)網(wǎng)IP就是局域網(wǎng)內(nèi)使用的IP
例如:網(wǎng)吧
網(wǎng)吧中的網(wǎng)線都是連接在同一個交換機上的,也就是說它們的IP地址是由交換機或者是路由器進行分配的,并且每一個IP各不相同,每一臺電腦都可以通過internet(注意是小寫的internet,即互連網(wǎng)) 訪問到局域網(wǎng)內(nèi)的另一臺電腦。
怎樣查詢自己的內(nèi)網(wǎng)IP呢 ?
很簡單:在cmd中 輸入ipconfig
即可查詢外網(wǎng)IP
外網(wǎng)IP的概念則是建立在Internet(大寫的Internet 即 互聯(lián)網(wǎng))之上的。
外網(wǎng)IP是由ISP(Internet Service Provider)分配的 如電信,聯(lián)通,移動等等
在下文所說的IP地址也都是外網(wǎng)IP地址 那么如何查詢自己電腦的IP呢?
很簡單:點擊查詢IP地址
通過簡單的百度查詢就可以知道自己的IP地址以及ISP是哪一家-
內(nèi)網(wǎng)IP和外網(wǎng)IP的區(qū)別
簡單來說:
外網(wǎng)IP標(biāo)示了你在互聯(lián)網(wǎng)上的地址
內(nèi)網(wǎng)IP則標(biāo)示了你在局域網(wǎng)里面的地址
還是以網(wǎng)吧舉例:
當(dāng)你在網(wǎng)吧上網(wǎng)時,首先要向網(wǎng)關(guān)發(fā)出請求,然后再由網(wǎng)關(guān)(一般是路由器)
由外網(wǎng)IP轉(zhuǎn)到互聯(lián)網(wǎng)上,接收數(shù)據(jù)之后再發(fā)送到內(nèi)網(wǎng)IP上
ip.jpg
圖片截取于百度
既然談完了IP,我們就了解了想去訪問服務(wù)器上的資源除了遵循協(xié)議,還有就是實際上是要通過服務(wù)器的IP地址來進行訪問的。
那么 這么長的IP地址 怎么能記得住呢?
所以,域名就出現(xiàn)了。
域名是什么?
域名即:Domain Name
剛剛已經(jīng)說了www.baidu.com
就是一個域名 它和IP地址的作用是等價的。
想一想記住 baidu 要 比記住一大串IP地址方便得多。問題是,誰去將百度的IP翻譯成百度這個域名呢。
所以,DNS就出現(xiàn)了。
DNS的全稱為:Domain Name System
即:域名解析系統(tǒng)。負責(zé)域名解析的計算機被稱為域名解析服務(wù)器。
也就是說DNS是一個將域名翻譯成IP的系統(tǒng)。
早在APPANET時代,整個網(wǎng)絡(luò)上只有數(shù)百臺計算機,那個時候使用一個叫做hosts的文件,hosts文件列出了所有的主機的名字以及相應(yīng)的IP地址。只要輸入一臺主機的名字 計算機很快就可以將這臺主機的名字轉(zhuǎn)換為機器能夠識別的IP地址。當(dāng)然,直到現(xiàn)在,這種客戶端的靜態(tài)解析方法仍然在使用,hosts文件在windows系統(tǒng)中存放在C:\Windows\System32\drivers\etc這個文件夾中,只需要在hosts文件中添加 IP 域名
這種格式的內(nèi)容 就可以使計算機優(yōu)先在本地上完成域名的一個靜態(tài)解析。但是現(xiàn)在的域名解析遠遠不止這么簡單。
要了解域名解析的過程,首先要知道以下幾個知識。
- 互聯(lián)網(wǎng)的域名結(jié)構(gòu)
每一個域名都由標(biāo)號序列組成,各標(biāo)號之間使用"." 隔開
在說清楚域名的結(jié)構(gòu)之前必須要提一個重要的概念 :根域
www.baidu.com實際上完整的域名是www.baidu.com.(請看清出com后面多出了一個點) 不僅僅是百度 所有的域名后面實際上都跟著一個 " . ",一般,我們在瀏覽器輸入時會省略這個 " . " 而忽略這個 " . "也變成了習(xí)慣,所以,如果你現(xiàn)在輸入www.baidu.com. 這個域名的話,肯定是訪問錯誤的。
而 被忽略的 " . " 卻是最重要的根域 因為,它象征著一切的開始
從根域其后面依次是頂級域名,二級域名,三級域名...
如:www.baidu.com
其中 com 是頂級域名
baidu 是二級域名
www 是三級域名
域名.JPG
-
域名服務(wù)器
上文提到域名服務(wù)器是用來進行域名解析,提供DNS服務(wù)的服務(wù)器。
但是域名服務(wù)器又可以劃分為不同層級的服務(wù)器。
這些服務(wù)器的具體工作在后文有介紹,所以先把這些服務(wù)器的名字記住。
它們是:根域名服務(wù)器,頂級域名服務(wù)器,權(quán)限域名服務(wù)器,本地域名服務(wù)器。
1:根域名服務(wù)器:全世界根域名服務(wù)器只有13個不同的IP地址的域名,它們分別是
a.root-servers.net ,b.root-servers.net .... m.root-servers.net
當(dāng)然只有13個域名不代表全世界只有13臺根域名服務(wù)器。 全球設(shè)置了很多這些服務(wù)器的鏡像站點,其實想一想 如果只有13臺根域名服務(wù)器,那么互聯(lián)網(wǎng)的世界應(yīng)該會一團亂糟。
2:頂級域名服務(wù)器
頂級域名服務(wù)器負責(zé)管理該頂級域名服務(wù)器下注冊的所有二級域名
3:權(quán)限域名服務(wù)器
權(quán)限域名服務(wù)器可以理解為域名所有者服務(wù)器下設(shè)置了相應(yīng)權(quán)限的域名服務(wù)器。
4:本地域名服務(wù)器
如果現(xiàn)有一臺計算機,通過ISP如電信連接到了互聯(lián)網(wǎng),那么ISP就會給這臺計算機分配給一個DNS服務(wù)器,這個服務(wù)器并非權(quán)威的DNS服務(wù)器。其實查詢本地域名服務(wù)器操作很簡單 只需要打開cmd 輸入ipconfig/all
命令就可以獲取
如我的本地DNS為:
本地DNS.JPG
本地DNS服務(wù)器,可以自己去設(shè)置 比如你可以設(shè)置為8.8.8.8 (Google 免費的DNS服務(wù)器) 一般都為自動獲取。 遞歸查詢與迭代查詢
本機向本地域名服務(wù)器查詢方式為遞歸查詢
本地域名服務(wù)器向根域名服務(wù)器等權(quán)威服務(wù)器查詢的方式為迭代查詢
這兩點需要知道。
本文不會介紹遞歸查詢和迭代查詢(實際上我不太會,日后補充,多多見諒...)
簡單了解這幾個概念后,我們就來看一下
一個完整的DNS查詢過程是怎樣的
以查詢www.baidu.com為例
- 客戶端本地hosts文件查詢
在上文提到過hosts文件,它是最早的域名解析模型,也沿用至今。當(dāng)在瀏覽器輸入欄上輸入一個域名時,瀏覽器當(dāng)然不知道這是什么東西,它會第一時間在本地的hosts文件中尋找是否有對應(yīng)的IP地址。 - 當(dāng)在hosts文件中查詢失敗后,計算機就要向本地DNS服務(wù)器發(fā)起查詢請求了
這個請求方式為遞歸查詢,本地DNS服務(wù)器首先會檢查自己的緩存,如果緩存中有www.baidu.com對應(yīng)的IP地址則直接返回給客戶端,這種應(yīng)答方式 是 非權(quán)威性的應(yīng)答方式 - 如果本地DNS服務(wù)器的緩存中沒有查詢域名對應(yīng)的緩存的IP地址則會從 本地DNS服務(wù)器的配置文件中 讀取 13個根域名服務(wù)器的地址 然后開始向權(quán)威服務(wù)器進行迭代查詢。
- 向13個根域名所對應(yīng)的服務(wù)器中的一臺發(fā)起請求
- 根域名服務(wù)器拿到請求后,判斷www.baidu.com是com.這個頂級域名下的 于是告訴本地域名服務(wù)器 你去 com. 域的服務(wù)器找吧 并給了本地DNS服務(wù)器一個IP地址
- 本地域名服務(wù)器通過IP地址找到了com域的服務(wù)器并向com域的服務(wù)器發(fā)起請求,com域的服務(wù)器發(fā)現(xiàn) 你這個請求時baidu.com這個域的 ,并給了本地DNS服務(wù)器一個IP地址。
- 本地DNS服務(wù)器拿著IP地址找到了baidu.com域的服務(wù)器并向baidu.com這個域的服務(wù)器發(fā)起了請求,baidu.com收到后 查了一下 發(fā)現(xiàn) 有www.baidu.com對應(yīng)的IP于是告訴本地DNS服務(wù)器
- 本地DNS服務(wù)器拿到了www.baidu.com的IP地址后將其返回給了客戶端,并將這個信息保存在高速緩存中(本文不涉及高速緩存的知識點)
這就是一次較為完整的DNS查詢過程。
接下來我們對上述過程進行一個驗證。
驗證的方法是使用Linux中的一個命令,即:
dig
dig 命令有多種用法 在本文使用的命令為dig xxx.com +trace
此命令的含義為:從根服務(wù)器開始追蹤一個域名,并在本地做迭代且記錄查詢過程
windows上不支持此命令.
在Linux終端上輸入:
dig
-
向本地DNS服務(wù)器獲取根服務(wù)器的13個IP及所對應(yīng)的主機名稱。
1.png 第二步是向其中的一臺根域服務(wù)器(1.png括號對應(yīng)的IP)發(fā)送www.baidu.com的查詢請求,這臺根域名服務(wù)器返回了com.頂級域的服務(wù)器IP(未顯示)和名稱將信息傳遞給。
-
向com.域的一臺服務(wù)器請求,www.baidu.com,他返回了baidu.com.域的服務(wù)器IP和名稱.(未顯示)
2.png -
向baidu.com.域的服務(wù)器請求www.baidu.com
3.png
可以看到查詢的服務(wù)器是b.gtld-servers.net 它返回了一個baidu.com.域的服務(wù)器的IP地址和名稱(未顯示)
4.png -
可以看到本地DNS服務(wù)器到了www.baidu.com.域后,發(fā)現(xiàn) 你找的這個域名 有個別名是
www.a.shifen.com 于是就去請求a.shifen.com.域里的服務(wù)器。最終接收到了ns2.baidu.com.域的服務(wù)器返回給本地DNS的IP地址
5.png
其實上述過程十分復(fù)雜,我本人也只是照葫蘆畫瓢,需要進行查缺補漏以后有時間還會進行詳細的總結(jié)以及修正。- . -
剛剛使用了Linux下的dig +trace命令,這個命令是從根域名服務(wù)器開始追蹤一個域名并在本地上記錄迭代查詢過程的一個命令
接下來還會介紹兩個命令:nslookup 及 ping命令 (windows及Linux都支持此命令)
- nslookup
nslookup 命令的作用檢測網(wǎng)絡(luò)中DNS服務(wù)器能否正確實現(xiàn)域名解析的工具
這里只介紹簡單的用法 即:nslookup DomainName
如使用nslookup www.baidu.com
nslookup1.JPG
第一個服務(wù)器代表的就是 本地域名服務(wù)器 可以看到本地域名服務(wù)器的IP地址為10.198.1.1這同上文中我們使用ipconfig/all 獲取的本地DNS的地址是一致的
在下一行中可以看到 返回的是一個非權(quán)威應(yīng)答 即說明本地DNS服務(wù)器有緩存www.baidu.com這個域名所對應(yīng)的IP地址并且返回了兩個IP,這兩個IP都是可以直接訪問到百度的服務(wù)器地址
接下來是ping命令 - ping
ping命令一般用于檢測網(wǎng)絡(luò)是否通暢 ,檢驗網(wǎng)絡(luò)的狀況及時延。ping向目標(biāo)主機(地址)發(fā)送一個請求的數(shù)據(jù)包,要求目標(biāo)主機收到請求后給予答復(fù),從而 判斷網(wǎng)絡(luò)的相應(yīng)時間,以及本機是否與目標(biāo)主機地址處于聯(lián)通的狀態(tài)。
例如:
ping www.baidu.com
ping.JPG
如上例所示 主機向百度發(fā)送了32個字節(jié)的數(shù)據(jù)通過ping命令 不僅可以看到 百度的IP地址為14.215.177.39還可以通過時延來判斷網(wǎng)絡(luò)的好壞。ping命令也有很多用法,本文只通過這一個案例做簡單的介紹。
5:什么是 HTML?
HTML即:Hypertext Markup Language
翻譯成中文是超文本標(biāo)記語言。
網(wǎng)頁的本質(zhì)就是超文本標(biāo)記語言,它通過結(jié)合其他的web技術(shù)如腳本語言,組件等等 可以創(chuàng)造出功能強大的網(wǎng)頁。超文本標(biāo)記語言是萬維網(wǎng)編成的基礎(chǔ),或者可以說萬維網(wǎng)是建立在超文本基礎(chǔ)之上的。我們再瀏覽器輸入網(wǎng)址后,瀏覽器為我們跳轉(zhuǎn)到了一個頁面,這個頁面的內(nèi)容就是用HTML寫出來的,瀏覽器將HTML翻譯成我們可以看得懂的,直觀且美觀的網(wǎng)頁。
6:什么是HTTP協(xié)議?
HTTP協(xié)議在上文已經(jīng)有一定的介紹了。
HTTP即:超文本傳輸協(xié)議(Hypertext Transfer Protocol)
一個URL中,開頭的部分即是一種協(xié)議 如:http ,https,ftp,file 等等。
萬維網(wǎng)的誕生也可以說是HTTP協(xié)議的誕生。
我們都知道互聯(lián)網(wǎng)的誕生本質(zhì)上是互連網(wǎng)遵從了一種規(guī)范 即數(shù)據(jù)傳輸?shù)囊?guī)范:TCP/IP。
HTTP協(xié)議是在應(yīng)用層上的協(xié)議,主要解決的問題是數(shù)據(jù)該如何包裝起來。
那么數(shù)據(jù)怎么包裝呢?包裝的方式其實就是HTML
超文本傳輸協(xié)議,允許將超文本標(biāo)記語言(HTML)的文檔從web 服務(wù)器傳輸?shù)娇蛻舳说臑g覽器 。這就是HTTP協(xié)議。
當(dāng)然或許你有一些疑惑,在輸入絕大部分網(wǎng)站的URL時都是以 https進行開頭的,不要著急,關(guān)于HTTPS協(xié)議會在后文介紹。
7:服務(wù)器與客戶端,請求和響應(yīng)。Chrome開發(fā)者工具及 curl命令的使用
客戶端即是訪問者,服務(wù)器即是被訪問的對象。
或者可以簡單地理解為,一個是瀏覽網(wǎng)頁的,一個是提供網(wǎng)頁服務(wù)給瀏覽者瀏覽的。
那么客戶端從輸入URL 到 頁面的呈現(xiàn) 到底發(fā)生了什么呢?
這個問題在本文不會給出詳細的解答。但是我們可以知道客戶端和服務(wù)器之間一定存在著某種"溝通"。
這種溝通就是請求(Request)和 響應(yīng)(Response)
在我們輸入了URL之后,瀏覽器給服務(wù)器發(fā)送了一個request,web服務(wù)器接收到request后進行處理,然后返回給瀏覽器一個response,瀏覽器通過解析response中的HTML,我們就看到網(wǎng)頁了。這里面暫時不討論中間或有經(jīng)過代理服務(wù)器的因素。
在學(xué)習(xí)請求和響應(yīng)之前,我們需要知道Chrome瀏覽器開發(fā)者工具以及curl命令的使用。
- curl命令的使用
curl命令是一個功能強大的網(wǎng)絡(luò)工具,可以通過 http 協(xié)議 ftp 協(xié)議進行文件的下載,獲取頁面內(nèi)容或接口響應(yīng)等等功能
本文的目的在于學(xué)習(xí)請求和響應(yīng)。對于curl 的一些強大的功能 不會過多介紹,希望日后也能在我翻閱自己的文章時,回顧并重新學(xué)習(xí)。
- curl url
這個命令也是curl 最簡單的命令,作用為獲取頁面內(nèi)容 如:curl "https://www.baidu.com"
獲取到的是百度的首頁信息 以HTML的格式顯示 - -s/--slient
靜音模式,減少輸出的信息,比如進度 - -v/--verbose
顯示整個HTTP訪問的過程。 - -G/--get
以get的方式來發(fā)送數(shù)據(jù)(默認) - -X/--request <command>
指定發(fā)送的命令 curl 默認的HTTP動詞為GET 使用 -X 參數(shù)可以支持其他動詞,如POST - -H/--header<header>
指定請求頭參數(shù) 需要以key:value的形式進行指定 - -d/--data<data>
使用-d 可以發(fā)送帶參數(shù)的請求默認方式為 post提交方式
除了上述的命令外,curl還有許多功能,在本文僅僅介紹了本文會使用的一些命令。
在了解了簡單的curl 命令后 敲入命令:
curl -s -v -- "https://www.baidu.com"
在命令行返回數(shù)據(jù)中 最后面可以看到圖示內(nèi)容:
第一個 [5 bytes data] 后面到 空格為止的內(nèi)容就是請求的內(nèi)容
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.64.0
Accept: */*
// 注意有空格
第二個 [5 bytes data] 后面到空格為止的內(nèi)容就是響應(yīng) 的內(nèi)容
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Fre, 22 Mar 2019 16:33:55 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
//注意有空格
首先來看一下請求:
HTTP請求包括四個部分:
1:請求行
在本例中請求行為:GET / HTTP/1.1
GET是請求方法 或者 你可以叫它請求動詞 在后續(xù)中后將到GET的具體含義
/ 則是代表路徑 也就是path
HTTP/1.1是對應(yīng)的協(xié)議版本號
2:請求頭
請求頭的存在形式是以key:value形式存在的本例中 請求頭為:
Host: www.baidu.com
User-Agent: curl/7.64.0
Accept: */*
當(dāng)然也自己添加一些請求頭的信息 使用 curl -H "key:value"
如:curl -s -v -H "Dobby:Kim" -- "https://www.baidu.com"
注意自定義的請求頭信息也要以key:value的形式進行添加
可以看到輸入了這個命令后 請求頭中 就增加了我自定義的請求頭信息
Dobby:Kim
3:空行
空行非常重要,在請求頭后使用空行發(fā)送換行符是為了通知服務(wù)器后面的內(nèi)容不再有請求頭的信息了
4:數(shù)據(jù)/數(shù)據(jù)體
本例中請求的信息中是沒有數(shù)據(jù)的,那么如何增加數(shù)據(jù)呢
需要改變請求動詞 以及 增加一個
curl -d "data"
的命令使用命令:
curl -X POST -d "lubenweiniubi" -s -v -H "Dobby:Kim" -- "https://www.baidu.com"
可以看到請求的信息中 GET變成了POST
同時在請求頭中多出了兩個信息:
Content-Length:13 以及 Content-Type:application/x-www-form-urlencoded
這個Content-Length 實際上就是我上傳數(shù)據(jù)的字符串長度
lubenweiniubi
正好是13個字符長度而Content-Type 則對應(yīng)的是一種編碼格式
在curl 命令中 雖然看不到請求體的內(nèi)容 但是 后面在介紹Chrome開發(fā)者工具后 我們就可以在開發(fā)者工具中的
Form Data
選項卡看到 數(shù)據(jù)體的內(nèi)容了。
接下來看一下響應(yīng):
HTTP響應(yīng)包括四個部分:
1:狀態(tài)行
本例中 HTTP/1.1 200 OK
是對應(yīng)的狀態(tài)行 HTTP/1.1仍然是協(xié)議 200 是HTTP 中的一種狀態(tài)碼 代表成功 關(guān)于更多的狀態(tài)碼在后文會有介紹 OK不用說 是對狀態(tài)碼的描述信息
2:響應(yīng)頭
本文中 響應(yīng)頭為:
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Fre, 22 Mar 2019 16:33:55 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
可以看到響應(yīng)也是以key:value的形式存在的
簡單看一下 Content-Length 應(yīng)該代表的是響應(yīng)給客戶端內(nèi)容的大小
Content-Type則表示 返回的響應(yīng)頁面的格式是text/html
Date則表示響應(yīng)的時間 總之這些響應(yīng)頭的內(nèi)容同 請求頭的格式一樣都是以key:value形式保存的
3:空行
空行的作用是告訴客戶端瀏覽器 后面已經(jīng)沒有響應(yīng)頭的內(nèi)容了
4:要下載的內(nèi)容
要下載的內(nèi)容即服務(wù)器返回的HTML頁面。
<!DOCTYPE html>... ... ...
介紹了curl 命令后 進入到Chrome 開發(fā)者工具的學(xué)習(xí),Chrome開發(fā)者工具實際上要比curl 命令更常用一些
- Chrome開發(fā)者工具的使用
依然以www.baidu.com舉例:
1:打開Chrome瀏覽器 按F12
2:在瀏覽器輸入框中輸入 百度的URL
你會看到在開發(fā)者工具中的Elements選項卡下出現(xiàn)了很多類似標(biāo)簽一樣的東西
這就是呈現(xiàn)在你面前的網(wǎng)頁所對應(yīng)的HTML文檔在Elements選項卡右邊有一個Network選項卡,找到并點擊
你會看到這樣的東西:
開發(fā)者工具1.JPG
如果你沒有看到Method,Status這樣的內(nèi)容可以在Name處單機鼠標(biāo)右鍵將這些選項卡調(diào)出來,因為這些選項卡非常重要
3:點擊第一個www.baidu.com GET 200 ...
的文件
你會看到這樣的東西
開發(fā)者工具2.JPG
將Response Headers 和 Request Headers的內(nèi)容打開并點擊 旁邊的view source
request headers.JPG
不用說,Request Headers是請求頭的內(nèi)容 Response Headers則是響應(yīng)頭的內(nèi)容。
現(xiàn)在我們對請求和響應(yīng)做一個簡單的總結(jié):
1:請求的請求行信息為:請求動詞 路徑 協(xié)議/版本號
2:響應(yīng)的響應(yīng)頭信息為:協(xié)議/版本號 HTTP狀態(tài)碼 狀態(tài)碼描述信息
3:無論是請求和相應(yīng) 它們的第三部分永遠是一個回車 (\n)
4:一個請求最多多包含四部分 最少是三部分
5:如果在請求時沒有寫路徑那么默認為/ 這里的路徑包括查詢參數(shù) 但是不包括錨點
下面通過對HTTP常見請求方式的介紹,來更具體地使用Chrome開發(fā)者。
8:常見 HTTP請求方式介紹,GET和 POST的區(qū)別 ?
常見的HTTP請求方式有:
GET,POST,PUT,PATCH,HEAD DELETE等等
- GET
GET請求是用來獲取的。
向一個指定的資源發(fā)出請求,請求這個資源的頁面信息,并返回實體主題 - POST
POST請求是用來提交的。
POST請求向指定的資源提交數(shù)據(jù)如 提交表單,上傳文件等等 - PUT
PUT請求 是指向指定資源上傳最新的內(nèi)容
它與POST請求很像 通俗地解釋就是:
新建一條記錄就用POST 更新一條記錄就用PUT
本文不會討論這些請求的本質(zhì)意義上的區(qū)別,僅作簡單的介紹 - DELETE
DELETE請求用于刪除指定的資源 - HEAD
HEAD請求資源的首部信息 并且這些首部信息與GET請求方法請求時返回的內(nèi)容一致。HEAD請求的應(yīng)用場景為在下載一個大文件前先獲取其大小再決定是否要下載 - PATCH
請求方法 PATCH 用于對資源進行部分修改
HTTP協(xié)議中,PUT方法用來對資源進行整體的覆蓋,POST方法沒有對標(biāo)準(zhǔn)的補丁格式提供支持,不同于PUT方法,而與POST方法類似,PATCH請求方法是非等冪的,它以為者連續(xù)多個相同的請求會產(chǎn)生不同的效果。
除了上述六種請求方式 還有 OPTIONS 和 CONNECT 請求方式
在此 不對其介紹(實際上我目前不會... 日后一定補充 - . -)
附上 所有方法的MDN鏈接地址
GET
POST
PUT
DELETE
PATCH
HEAD
OPTIONS
CONNECT
接下來著重對比和學(xué)習(xí)GET和POST請求 。
實際上GET和POST如果要想講出來它們的本質(zhì)以及區(qū)別又是一項巨大的工程量。
推薦博客:GET和POST兩種請求方法的區(qū)別
本文僅僅介紹GET和POST的應(yīng)用場景 ,至于二者的具體區(qū)別 在日后,我會單獨寫一個長篇博客 進行學(xué)習(xí)。
其實應(yīng)用場景已經(jīng)在上面介紹完畢了:
最簡單的應(yīng)用場景:
GET請求一個頁面,POST提交一些數(shù)據(jù)。
在使用Chrome開發(fā)者 并在瀏覽器輸入框輸入 百度的網(wǎng)址后
我們看到www.baidu.com這個主頁面文件 后面的Method 是GET
接下來,嘗試一下登陸百度,首先要退出百度賬號,點擊clear 即紅點點右邊的那個?,勾選Preserve log 這個Preserve log是用來保存日志的。
在我登陸百度的時候 Network 下面的日志出現(xiàn)了一個?login的文件
可以看到它右邊的Method 對應(yīng)的是POST請求方法
點擊進去,可以看到多出了一個Form Data 選項卡
而Form Data里面對應(yīng)的就是請求體的內(nèi)容。里面可以看到username 以及password 對應(yīng)的key:value形式的數(shù)據(jù) 當(dāng)然,password 所對應(yīng)的東西是一大長串加密的數(shù)據(jù),這得益于https協(xié)議的保護機制。
其實,這一小節(jié)我想說明的東西很簡單就是GET和POST到底應(yīng)用在什么場景:
GET應(yīng)用在資源的訪問上
POST的應(yīng)用一定是需要上傳某些數(shù)據(jù)的時候。
9:常見 HTTP狀態(tài)碼介紹
狀態(tài)碼其實大家都見過,而且最常見的應(yīng)該就是404了吧。
想一想 當(dāng)出現(xiàn)404頁面的時候 上面說了些什么? 絕大部分是這句話:頁面找不到了
其實可以這樣理解:狀態(tài)碼就是服務(wù)器對瀏覽器說的話。
本小節(jié)會簡單介紹一些常見的HTTP狀態(tài)碼。
在介紹常見的狀態(tài)碼前,先了解一下以這些數(shù)字開頭的狀態(tài)碼代表什么含義
- 1xx : 信息響應(yīng)(不常用)
- 2xx:成功
- 3xx:重定向
- 4xx:客戶端錯誤
- 5xx:服務(wù)端錯誤
MDN:HTTP狀態(tài)碼
本文不會將所有的狀態(tài)碼全部介紹,僅會介紹常用的狀態(tài)碼 希望了解更多可點擊上方MDN的鏈接
200
請求成功301
被請求的資源已永久移動到新位置,通常會發(fā)送HTTP Location來重定向到正確的新位置。返回301請求碼進行跳轉(zhuǎn)被Google認為是將網(wǎng)站地址由 HTTP 遷移到 HTTPS 的最佳方法302
請求的資源暫時駐留在不同的URI下面401
當(dāng)前的請求需要進行用戶的驗證。403
403是HTTP協(xié)議中的一個狀態(tài)碼,可以理解為 沒有權(quán)限訪問此網(wǎng)站,服務(wù)器接收到了用戶的請求,并理解了請求,但是拒絕為其提供服務(wù)404
HTTP 404 即 Not Found
請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)
通常是因為,用戶所訪問的網(wǎng)頁已經(jīng)被刪除被移動 或從未存在。500
500狀態(tài)碼表示內(nèi)部服務(wù)器錯誤,服務(wù)器遇到了不知道如何處理的情況。502
此錯誤響應(yīng)表明服務(wù)器作為網(wǎng)關(guān)需要得到一個處理這個請求的響應(yīng),但是得到一個錯誤的響應(yīng)。503
服務(wù)器沒有準(zhǔn)備好處理請求。 常見原因是服務(wù)器因維護或重載而停機。
常見的http狀態(tài)碼介紹完畢。
10: 什么是HTTPS協(xié)議?HTTP 和 HTTPS協(xié)議有什么區(qū)別?
在上文中 被反復(fù)使用到的百度及現(xiàn)在絕大部分網(wǎng)站 使用的協(xié)議都是HTTPS協(xié)議
那么什么是HTTPS協(xié)議呢?
要說HTTPS協(xié)議 就不得不說到HTTP協(xié)議產(chǎn)生了什么問題。
當(dāng)你訪問一個網(wǎng)站,默認了HTTP協(xié)議作為應(yīng)用層,那么傳輸?shù)膬?nèi)容實際上是明文傳輸?shù)摹.?dāng)你去傳輸一些私人的信息時,例如信用卡賬號,密碼等 黑客就可以輕易地從網(wǎng)絡(luò)流量中截取你發(fā)送的信息。
HTTP暴漏出的問題有以下幾點:
- 竊聽風(fēng)險:
第三方可獲取通信內(nèi)容 - 篡改風(fēng)險
第三方可修改通信內(nèi)容 - 冒充風(fēng)險
第三方可冒充他人身份參與通信
為了解決HTTP帶來的諸多問題
SSL及TLS加密技術(shù)就誕生了
SSL 即 Secure Sockets Layer
SSL協(xié)議位于TCP/IP協(xié)議和各種應(yīng)用層協(xié)議之間 為數(shù)據(jù)通訊提供著安全支持
TLS 即 Transport Layer Security 它是SSL的升級版并且比SSL更加標(biāo)準(zhǔn)化,且更加安全
現(xiàn)在可以解釋HTTPS究竟是什么了
(圖片截取于博客淺談HTTPS協(xié)議和SSL,TLS之間的區(qū)別)
https.JPG
現(xiàn)在回到HTTPS的定義:
HTTPS 即 Hypertext Transfer Protocol Secure 中文為超文本傳輸安全協(xié)議。
簡單解釋就是HTTP協(xié)議的安全版。它使用了SSL/TLS作為HTTP應(yīng)用層的子層。并使用端口443 而非 HTTP使用80端口和TCP/IP進行通信。HTTPS協(xié)議需要使用到ca申請證書,且SSL依靠證書來驗證服務(wù)器的身份,并未瀏覽器和服務(wù)器之間的通信進行加密。
HTTP協(xié)議和HTTPS協(xié)議的區(qū)別:
- https協(xié)議需要ca申請證書,證書需要一定的費用
- http即超文本傳輸協(xié)議 信息屬于明文傳輸,而https則具有SSL加密傳輸協(xié)議支持。
- 端口號不同,http的端口號是80 https的端口號為 443
- https協(xié)議是由http+ssl進行構(gòu)建的可進行加密傳輸,身份認證等功能要比http協(xié)議更加安全