HTTP
什么是HTTP?HTTP是應(yīng)用層的一個重要協(xié)議.它定義了瀏覽器怎樣向服務(wù)器請求文件,以及服務(wù)器怎樣把文件傳送給瀏覽器.
我們打開瀏覽器,手動輸入一個網(wǎng)址:baidu.com.那么此時瀏覽器就會給百度的服務(wù)器發(fā)送請求.百度服務(wù)器在返回一個html的響應(yīng).
那么我們?nèi)绾螌W(xué)習(xí)HTTP協(xié)議呢?通過它的協(xié)議報文格式,我們就能看到HTTP具體是什么樣子的了。
HTTP的報文協(xié)議格式
學(xué)習(xí)HTTP的報文格式,需要通過一個抓包工具來實現(xiàn).
那么抓包工具是什么呢?
一. 抓包工具
抓包工具的本質(zhì)就是一個代理,簡稱跑腿的.比如A想喝樓下茶百道奶,讓給他買.B此時充當(dāng)?shù)慕巧褪谴怼?br>
由于B是那個替別人執(zhí)行任務(wù)的,所以非常清楚任務(wù)的具體執(zhí)行過程。
我們引入抓包,就是為了獲取想要的原始數(shù)據(jù)。
我們推薦使用Fiddler來實現(xiàn)http的抓包。
Fidder的使用詳解
左右結(jié)構(gòu)
-
左側(cè):抓到的包的列表(注意,它是一直在持續(xù)的)
-
右側(cè):雙擊找到的包,會出現(xiàn)這個包的詳情頁。右上:請求 右下:響應(yīng)
二.HTTP請求
雙擊右上的Raw,就可以看到原來的格式,然后點擊view in notepad.就可以通過記事本來打開啦!
下圖就是一個完整的HTTP請求:
HTTP請求的組成部分
- 首行
2.Header
3.空行
Header的結(jié)束標(biāo)記
4.正文
body (可有可沒有)
下面我們著重介紹四個部分的首行和請求頭Header部分
1.首行
HTTP方法
HTTP有很多方法,其中比較重要的有兩個:
-
get 請求
-
post請求
它們都是客戶端向服務(wù)器發(fā)送請求的方法
get和post的區(qū)別
本質(zhì)上沒有室內(nèi)區(qū)別,但是在方法的使用上有些不同.
1.get用來表示“獲取一個數(shù)據(jù)”,post表示“提交一個數(shù)據(jù)”;
2.get沒有body,需要攜帶數(shù)據(jù)的話要放入URL中。而Post有body;
3.get是冪等的;=,post無要求;
(冪等就是輸入一定,輸出也一定。這樣只要是同一個輸入,就會有同一個輸出?。。。?br> 4.get可以緩存,post不可以;
(緩存是建立在冪等的基礎(chǔ)之上的,因為輸入一定,輸出也一定。所以我們可以把輸出緩存起來。這樣只要是同一個輸入。服務(wù)器就不用計算了,直接返回緩存中的結(jié)果)
5.get可以被瀏覽器收藏,post不可以。
URL
唯一資源定位標(biāo)識,描述了網(wǎng)絡(luò)上的一個唯一的資源。
如果覺得很抽象的話!我們可以舉一個生活中的例子,便于理解。
假設(shè)我們要去重慶工商大學(xué)的18窗口吃重慶小面:
那用URL來表示就是:
http://重慶工商大學(xué)3食堂:18//重慶小面/豌雜面?蔥=不要&辣椒=微辣&香菜=不要
服務(wù)器地址:重慶工商大學(xué)
端口號:18
訪問資源:重慶小面的豌雜面
補充說明:不要蔥微辣不要香菜.
注:查詢字符串是有鍵值對組成的。&分割鍵值對,=分割鍵和值。
版本號
HTTP的版本號有:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3
最新版本:HTTP/3
最常用版本:HTTP/1.1
2. 請求頭Header
鍵值對結(jié)構(gòu)。每個鍵值對都是一行;鍵和值之間采用: (冒號+空格)分割
空行結(jié)束。
Host
描述了瀏覽器要訪問的服務(wù)器是誰(地址+端口號)
與URL的區(qū)別:
URL中存放的是當(dāng)前目標(biāo),Host中存放的是最終目標(biāo)。
content-Type和content-Length
- content-Type
描述body的數(shù)據(jù)格式
作為請求的寫法:
通過form表單提交數(shù)據(jù),body的格式和查詢字符串(querry String)一樣,也就是url中的查詢字符串的格式:username=cy&password=gw520
數(shù)據(jù)格式是json,字符集是utf-8
{
username:cy;
password:gw520;
…
}
- content-Length
描述body的數(shù)據(jù)長度
這兩個屬性是跟著body走的,所以只有請求是Post時,才會出現(xiàn).
User-Agent(UA)
主要描述系統(tǒng)和瀏覽器是什么版本。
作用:
UA在早年互聯(lián)網(wǎng)行業(yè)還未發(fā)展起來的時候,是用來區(qū)分各種上網(wǎng)設(shè)備的(不同的型號等),不同的上網(wǎng)設(shè)備能支持的功能不同。
而如今,隨著互聯(lián)網(wǎng)的快速發(fā)展,瀏覽器之間的區(qū)別以及非常小了,UA存在的價值就是區(qū)分用戶是手機端、PC端還是平板。
referer
表示這個頁面是從哪個頁面跳轉(zhuǎn)過來的。
比如我在百度搜索肖戰(zhàn)。
此時的referer表示當(dāng)前頁面是從百度頁面跳轉(zhuǎn)過來的:
*
Cookie
俗稱小餅干,也是由鍵值對組成的。它是瀏覽器在本地存儲用戶自定義數(shù)據(jù)的一種重要機制。
數(shù)據(jù)都是存儲在服務(wù)器的,瀏覽器也需要存儲數(shù)據(jù)嗎?是的。
瀏覽器要存儲數(shù)據(jù),比如用戶信息。那么它如何存儲呢?直接訪問硬盤文件嗎?不可以,如果允許網(wǎng)頁訪問文件系統(tǒng)的話,如果有不良網(wǎng)頁篡改我們硬盤中的某些數(shù)據(jù),后果將不堪設(shè)想?。。?br> 所以為了保證網(wǎng)絡(luò)安全,瀏覽器會限制網(wǎng)頁訪問我們的文件系統(tǒng)。
既然瀏覽器阻止網(wǎng)頁訪問文件系統(tǒng),又想要存數(shù)據(jù)。該如何實現(xiàn)呢?Cookie機制!
瀏覽器通過Cookie機制,允許網(wǎng)頁往瀏覽器這邊寫入一些自定義的鍵值對。這些數(shù)據(jù)通過瀏覽器的api,寫入特定的文件(往指定位置存儲指定文件)。
- Cookie從哪兒來
從服務(wù)器來。當(dāng)瀏覽器訪問服務(wù)器時,服務(wù)器會返回一個HTTP響應(yīng),響應(yīng)中的set-Cookie字段就包含了Cookie鍵值對。
在瀏覽器搜索baidu.com,通過抓包工具進行抓包,找到這個包,點擊響應(yīng),打開:
再次打開瀏覽器,就可以看到瀏覽器存儲的數(shù)據(jù)了。
- Cookie到哪里去
瀏覽器保存之后,后續(xù)再訪問服務(wù)器,就會帶上Cookie。
- Cookie有什么用
瀏覽器本地存儲數(shù)據(jù)的機制。最主要的作用就是存儲用戶登錄信息。當(dāng)再次訪問服務(wù)器,帶上Cookie,服務(wù)器就能知道是哪個用戶。
例1:我們登錄 QQ郵箱,此時瀏覽器會記住用戶登錄信息,服務(wù)器根據(jù)這個用戶登陸信息,返回這個用戶信息的數(shù)據(jù)(比如收件箱,草稿箱等等)。我們再去點擊收件箱,就不用重新登錄了,會直接出來這個這個用戶對應(yīng)的頁面。
例2:cookie有點像我們平時的校園卡,校園卡里存儲了每個學(xué)生的信息,姓名,學(xué)號,余額等等。當(dāng)我們刷校園卡出入校門,系統(tǒng)就能通過校園卡識別信息。確認是本校學(xué)生,就可以進門了。
三.HTTP響應(yīng)
HTTP響應(yīng)的組成部分
像HTTP請求一樣,先點擊Raw,再點擊使用記事本打開??梢园l(fā)現(xiàn),是一個二進制文件!這是由于此時打開的是一個HTTP響應(yīng)的壓縮文件。我們可以點擊這個:
打開,就可以看到解壓過后的文本文件了。
如下圖是一個完整的HTTP響應(yīng):
HTTP響應(yīng)也可以分成四個部分:
1.首行
2.響應(yīng)報頭(Header)
3.空行
4.正文
(此處是一個HTML代碼)
HTTP響應(yīng)與HTTP請求的組成部分差不多,重點了解HTTP響應(yīng)首行中的狀態(tài)碼代表什么意思就可以了.
HTTP狀態(tài)碼
表示此次請求是成功還是失敗,用數(shù)字表示.
比較經(jīng)典的錯誤::
200:表示請求成功
301:永久重定向
302:臨時重定向
404:表示訪問的資源不存在
403:表示訪問被拒絕(沒有權(quán)限)
500:服務(wù)器內(nèi)部錯誤
504:服務(wù)器訪問超時文章來源:http://www.zghlxwxcb.cn/news/detail-458319.html
總結(jié)
HTTP協(xié)議報文格式:文章來源地址http://www.zghlxwxcb.cn/news/detail-458319.html
到了這里,關(guān)于HTTP 協(xié)議的基本格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!