網(wǎng)絡(luò)原理-HTTP
1. HTTP是什么
HTTP是一種基于傳輸層TCP并位于應(yīng)用層的超文本協(xié)議
目前主要使用HTTP1.1和HTTP2.0
2. HTTP協(xié)議基本格式
2.1 使用Fiddler抓包進(jìn)行分析
關(guān)于Fiddler:
- 是一個(gè)代理工具,就像高速路上的收費(fèi)站,不管什么車,只要它從高速路上經(jīng)過,那么就需要經(jīng)過收費(fèi)站
- 對應(yīng)到網(wǎng)站上,就是不管什么網(wǎng)站,只要有數(shù)據(jù)的上傳下載,那么就會經(jīng)過Fiddler,此時(shí)Fiddler就能夠知道所有網(wǎng)站的信息
使用方法:
-
刪除無關(guān)抓包信息(ctrl+A,delete)
-
打開想要抓包的網(wǎng)站 > 藍(lán)色對應(yīng)的即是request
-
查看request
在Fiddler的右半邊,查看請求和響應(yīng)
結(jié)果:
2.2 分析結(jié)果
請求:
GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5
Cookie: BIDUPSID=E1CBCCEF16E949D2FB803515D5054D7C; PSTM=1697071850; BD_UPN=12314753; sug=0; sugstore=0; BAIDUID=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; ORIGIN=2; bdime=0; H_WISE_SIDS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; H_WISE_SIDS_BFESS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; newlogin=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BA_HECTOR=852l8g05858g0g8h850g0580jpjv5b1iv0e401s; ZFY=3PherofMOQjTtCmZZKg9U85hiYToS99infKIvCcpg:Bc:C; BAIDUID_BFESS=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415
-
首行:“方法 url HTTP版本”
-
Header:以鍵值對的形式進(jìn)行標(biāo)識,每組屬性之間使用\n進(jìn)行分隔
-
Body:與Header部分有一個(gè)空行,其主體用來傳遞數(shù)據(jù)
- Body可以為空
- 不為空時(shí),在Header部分會有Content-type屬性標(biāo)識Body的長度
響應(yīng):
HTTP/1.1 200 OK
Connection: keep-alive
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Tue, 12 Mar 2024 14:57:29 GMT
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415; path=/; expires=Wed, 12-Mar-25 14:57:29 GMT; domain=.baidu.com
Traceid: 1710255449131260929015864326830156617079
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Content-Length: 406157
<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#ffffff"><meta name="description" content="全球領(lǐng)先的中文搜索引擎、致力于讓網(wǎng)民更便捷地獲取信息,找到所求。百度超過千億的中文網(wǎng)頁數(shù)據(jù)庫,可以瞬間找到相關(guān)的搜索結(jié)果。"><link rel="shortcut icon"
......
-
首行:“版本號 狀態(tài)碼 狀態(tài)碼解釋”
-
Header:以鍵值對的形式進(jìn)行標(biāo)識,每組屬性之間使用\n進(jìn)行分隔
-
Body:與Header部分有一個(gè)空行,其主體用來傳遞數(shù)據(jù)
- Body可以為空
- 不為空時(shí),在Header部分會有Content-type屬性標(biāo)識Body的長度
為什么都會有一個(gè)“空行”存在?
因?yàn)榭招斜硎井?dāng)前Header部分結(jié)束。
如果沒有這個(gè)標(biāo)識,會因?yàn)榈讓邮褂肨CP而發(fā)生**“粘包”問題**
3. HTTP請求(Request)
3.1 方法
方法 | 說明 | 支持的版本 |
---|---|---|
get | 獲取資源(可以請求緩存,無長度限制) | 1.0,1.1 |
post | 提交表單數(shù)據(jù),創(chuàng)建更新資源(不可請求緩存,無長度限制) | 1.0,1.1 |
put | 傳輸文件 | 1.0,1.1 |
head | 獲取報(bào)文首部 | 1.0,1.1 |
delete | 刪除文件 | 1.0,1.1 |
options | 查詢指定資源針對URL請求支持的方法 | 1.1 |
trace | 跟蹤路徑 | 1.1 |
connect | 連接改為管道方式 | 1.1 |
link | 請求和服務(wù)器建立連接 | 1.0 |
unline | 斷開連接 | 1.0 |
3.2 GET方法
使用Fiddler進(jìn)行抓包觀察:
特點(diǎn)
-
首行的第一部分顯示為:“GET”
-
URL的query string可以為空,也可以不為空
一個(gè)網(wǎng)址中==在問號后面的==就是query string內(nèi)容
-
Header部分為鍵值對結(jié)構(gòu)
-
body部分為空(所以Header部分沒有Content-Length)
3.3 POST方法
使用Fiddler進(jìn)行抓包觀察:
特點(diǎn)
-
首行第一部分為POST
-
body部分不為空
長度由Header部分的Content-Length決定
數(shù)據(jù)格式由Header部分的Content-Type決定
-
URL的query string?般為空(也可以不為空)
同GET方法的query string
3.4 GET與POST的區(qū)別?
-
GET請求一般是冪等的
POST請求一般不是冪等的
冪等就是多次請求得到的結(jié)果仍然相同
-
GET請求一般用于獲取資源
POST請求一般用于提交數(shù)據(jù)
-
GET請求可以被緩存
POST請求不被緩存
因?yàn)镻OST每次獲取的數(shù)據(jù)都是不一樣的, 所以不便于緩存
但是GET請求每次都是重復(fù)內(nèi)容, 緩存后能夠加快訪問速度
-
GET請求的body一般為空, 使用query string 進(jìn)行數(shù)據(jù)傳遞
POST請求的query string 一般為空, 使用body進(jìn)行數(shù)據(jù)傳遞
以上區(qū)別都不是硬性的, 都只是標(biāo)準(zhǔn)中的建議, 實(shí)際使用過程中完全可以不遵守這個(gè)約定.
- 可以將GET用于發(fā)送數(shù)據(jù), POST用于獲取數(shù)據(jù)
- GET也可是不冪等的
- 因?yàn)?有些網(wǎng)站中, 可以根據(jù)用戶的歷史記錄進(jìn)行實(shí)時(shí)個(gè)性化推薦
- 這同樣使用了GET, 但是這個(gè)返回的數(shù)據(jù)每次都是不同的
4. 請求"報(bào)頭"(Header)
-
Host: 表示服務(wù)器主機(jī)的地址和端口
-
Content-Length: body長度
-
Content-Type: body數(shù)據(jù)格式
-
User-Agent (UA): 標(biāo)識訪問服務(wù)器的操作系統(tǒng), 瀏覽器的屬性信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
- (Windows NT 10.0; Win64; x64) : 是操作系統(tǒng)信息
- Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0: 是瀏覽器信息
-
Referer: 表示當(dāng)前頁面由哪個(gè)頁面跳轉(zhuǎn)過來
Referer: https://www.baidu.com/
-
Cookie : 用戶登錄網(wǎng)站的"令牌"
- 就像以前出入皇宮, 都需要進(jìn)行嚴(yán)格的查驗(yàn), 但是只要你擁有皇上欽賜的==“黃馬褂”==, 那么就可以暢通無阻
- 網(wǎng)站中的cookie, 就是發(fā)揮著記錄你登陸網(wǎng)站的信息, 比如用戶名和密碼等, 下次再進(jìn)行登錄的時(shí)候就可以不用輸入用戶名和密碼
- cookie會保存在用戶的本地, 有些cookie是永久性的(除非手動刪除), 有些cookie是有有效期的
5. 狀態(tài)碼(Status Code)
5.1 2xx 成功
-
200 OK
:請求成功。 -
201 Created
:請求成功并且服務(wù)器創(chuàng)建了新的資源。 -
202 Accepted
:服務(wù)器已接受請求,但尚未處理。 -
204 No Content
:服務(wù)器成功處理了請求,但沒有返回任何內(nèi)容。
5.2 3xx 重定向
-
301 Moved Permanently
:請求的資源已永久移動到新位置。-
就像以前經(jīng)常換號的那個(gè)年代, 一個(gè)已經(jīng)被很多朋友知道的手機(jī)號, 不想一一通知他們換了新號, 那就辦理一個(gè)==“呼叫轉(zhuǎn)移”==服務(wù),
-
別人還是可以照常打到以前的那個(gè)號碼, 但是會直接撥通到現(xiàn)在這個(gè)新號
-
-
302 Found
(舊稱Moved Temporarily
):請求的資源現(xiàn)在臨時(shí)從不同的URI響應(yīng)請求。 -
304 Not Modified
:自從上次請求后,請求的資源未修改過。文章來源:http://www.zghlxwxcb.cn/news/detail-842157.html
5.3 4xx 客戶端錯(cuò)誤
-
400 Bad Request
:服務(wù)器不理解請求的語法。 -
401 Unauthorized
:請求要求身份驗(yàn)證。 -
403 Forbidden
:服務(wù)器拒絕請求。 -
404 Not Found
:服務(wù)器找不到請求的資源。 -
429 Too Many Requests
:用戶在給定的時(shí)間內(nèi)發(fā)送了太多的請求。
5xx 服務(wù)器錯(cuò)誤
-
500 Internal Server Error
:服務(wù)器遇到錯(cuò)誤,無法完成請求。 -
501 Not Implemented
:服務(wù)器不具備完成請求的功能。 -
502 Bad Gateway
:服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)。 -
503 Service Unavailable
:服務(wù)器暫時(shí)不可用(超載或停機(jī)維護(hù))。 -
504 Gateway Timeout
:服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時(shí)從上游服務(wù)器收到請求。
6. 響應(yīng)正文(body)
? 最重要的屬性是Content-Type文章來源地址http://www.zghlxwxcb.cn/news/detail-842157.html
- text/html :body數(shù)據(jù)格式是HTML
- text/css :body數(shù)據(jù)格式是CSS
- application/javascript :body數(shù)據(jù)格式是JavaScript
- application/json :body數(shù)據(jù)格式是JSON
到了這里,關(guān)于【JavaEE】網(wǎng)絡(luò)原理-HTTP的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!