本篇文章主要介紹WEB通信的機制,主要介紹了URL協定和HTTP協定。
這個部分重點介紹浏覽器與Web伺服器的詳細通信過程。
隻要上網通路伺服器,就離不開URL。
URL就是我們在浏覽器裡輸入的站點連結。又叫做“統一資源定位符”(Uniform Resource Locator)。
URL支援很多協定,比如HTTP、FTP等等。
PS:HTTP和URL有何差別?
答:(來源(https://www.jianshu.com/p/4fb712c05b63)
HTTP:(Hypertext transfer protocol)超文本傳輸協定,是用于從網際網路(WWW:World Wide Web)伺服器傳輸超文本到本地浏覽器的傳送協定。
URL:(Uniform Resource Locator)統一資源定位符,對可以從網際網路上得到的資源的位置和通路方法的一種簡潔的表示,是網際網路上标準資源的位址。
URL的作用就是定位伺服器的資源。
那如何才能定位到網站(伺服器)的資源呢?
我們來設想一下:我們在網上購買的東西是如何寄到我們手上的呢?
我們提供了我們的收貨位址。
在Web的世界中,URL就充當了收貨位址的角色。
浏覽器通過URL,可以定位到伺服器的資源,然後将伺服器的資源展示給我們。
這個“收貨位址”有一定的格式:
schema://host[:port#]/path/.../[?query-string] [#anchor]
schema:底層協定如http、https、ftp等;
host:伺服器的域名或者IP位址;
:port# : 伺服器端口,HTTP預設端口是80(可以省略),其他端口需要指明;
/path: 通路資源的路徑;
?query-string: 發送給伺服器的資料;
#anchor: 錨;通常表示在頁面的特定位置。
所有的URL都遵循這個URL标準。
http://dun.163.com/sj/test/test.jsp?name=sviergn&x=true#stuff
逐一解析:
schema:http協定;
host:dun.163.com;沒有指明端口,預設80
/path:/sj/test/test.jsp,通路資源的路徑;
?query-string:?name=sviergn&x=true;
anchor:#stuff
這一部分需要常憶常用。
HTTP就是Web通信時使用的協定,也是Web建立的基礎;是網絡上應用最廣的一種協定。
又稱超文本傳輸協定;Hyper Text Transfer Protocol;
為了了解這一協定的過程,我們設想一下快遞小哥的工作:
快遞小哥首先通過貨車派送貨物,當貨物送到我們的收貨位址的時候,快遞小哥就會打電話聯系我們,說是某某公司的快遞員,要我們來取件。
如果要讓快遞小哥送進小區裡面,我們就需要告訴物業準許他進入,相當于給他頒了個通行證;
當快遞小哥将貨物送到我們手上,我們需要簽收,快遞小哥拿到快遞單,就完成了一次快遞任務。
HTTP協定類似。
浏覽器:快遞小哥
快遞小哥通過貨車送貨:浏覽器通過Get方式發送請求。
HTTP中的Host就相當于“收件人位址”;
User-Agent就相當于快遞小哥所處的公司;
HTTP包含的Cookie就相當于能夠進入我們小區的憑證。
當伺服器收到浏覽器的HTTP請求後,會傳回一個狀态碼(對應收到這個事實)和相應内容(對應已簽收的字據)。狀态碼為200表示正常收到(狀态碼可以在上文中/前一篇的開發者工具的網絡中檢視)
可以看到HTTP協定的請求和響應包含了一些特殊的屬性,包含方式、User-Agent、Host、傳回的狀态碼等等;
這些都屬于HTTP的封包。
分為三部分:起始行、頭、身體
左邊,是浏覽器發送的HTTP請求封包,右邊是伺服器傳回的HTTP請求封包;
左側
第一行:請求行Request Line
之後:是我們的頭部Headers;
下面:應該是我們的資料體,但由于是GET請求,沒有資料體
注意頭部和資料體之間是有一個空行的。
右側
第一行:狀态行;
比如:HTTP/1.1 200 OK
頭部
主體:也就是響應的正文
注意響應的頭部和主題之間也是有一行空行的。
比如一個發帖的HTTP請求
當我們進行發帖的時候,我們的請求封包和響應封包如下:
請求
第一行:請求行
這裡是POST
Headers
相較于上面,多了一個Cookie字段,就是前面提到的使用者憑證,相當于告訴伺服器,是我發的這個文章。
黑客就比較喜歡擷取這個Cookie憑證,如果擷取,就擁有了“我”的憑證,可以以“我”的身份發帖。
後面會接觸一些這方面的安全漏洞。
也有了資料體
就是要釋出的文章的相關内容
HEAD
與GET請求類似,不同是隻傳回HTTP的頭部資訊,沒有資料體,也就沒有頁面内容。
PUT
上傳指定的URL描述
DELETE
删除指定資源
OPTIONS
傳回伺服器支援的HTTP方法
這是除了HTTP請求方式和Cookie的概念外,另一個重要概念。
Referer就是告訴伺服器,我們從什麼地方來(即告訴物業我們是哪個快遞公司的);
舉例:
我們通過https://m.study.163.com/直接跳轉到頁面。和從bing首頁搜尋雲課堂再進入,開發者工具中顯示的HTTP請求是不同的,後者會多一個Referer頭,表示是從bing的這個連結來的。
如圖;圖一是直接跳轉;圖二是搜尋跳轉;
直接跳轉Rerfer
搜尋跳轉的Rerfer與之不同。
是以由于Referer可以告訴伺服器該次請求的來源,是以很多Web伺服器會通過Referer來進行統計(比如CNZZ、百度統計)
從安全的角度來講,Referer還可以用來判斷來源是否合法。
(比如:
防止盜鍊
比如一些網站不想被盜用内容或惡意引用,就會通過Referer限制來者
防止CSRF漏洞
(暫不了解
比如:在響應封包的狀态行(第一行)
在跳轉同時,還會在響應封包的Headers部分有一個Location字段,是跳轉到的URL位址,也就是這個響應封包告訴我們,我們需要跳轉到Location中的URL位址。
除了這兩處,還會有Set-Cookie字段,作用是Web伺服器向我們的浏覽器頒發憑證,比如我們通過使用者名密碼登入成功後,Web伺服器通常就會給我們頒發一個憑證。
類似的是301。
除此之外,還包括10x,20x,30x,40x,50x;每個狀态碼都代表不同的意思。
分類
分類描述
10x
資訊,伺服器收到請求,需要請求者繼續執行操作
20x
成功,操作被成功接收并處理
30x
重定向,需要進一步的操作以完成請求
40x
用戶端錯誤,請求包含文法錯誤或無法完成請求
50x
伺服器錯誤,伺服器在處理請求的過程中發生了錯誤
具體的狀态碼可以到後面再學習,或用到檢視。
我們打開Edge浏覽器,輸入https://www.cnblogs.com/Roboduster
我們用F12打開開發者工具,進入“網絡”,重新整理一下,檢視“文檔”,選中head頭,可以看到有請求頭、響應頭,點選就可以看源碼,有一些是上面講過的,還有些字段是不熟悉的。這些字段可以自行查閱。
除了HEADER外,我們可以看一看響應的具體内容,在左側的“響應”中;Cookie中有請求的Cookie等等。