一.HTTP:
1. HTTP是超文本傳輸協(xié)議,除了傳輸字符串,還可以傳輸圖片,字體,視頻,音頻.
2.?
3.HTTP協(xié)議報(bào)文格式:a.首行,b.請求頭(header),c.空行(相當(dāng)于一個(gè)分隔符,分隔了header和body),d.正文(body).
4.
5.URL:唯一資源描述符(長度不限制).?
a.
b.注意:查詢字符串(query string)是鍵值對的格式.鍵值對之間使用'&'符號分割,鍵和值之間,使用'='分割,查詢字符串以'?'開始.
c.上述的URL幾個(gè)部分都是可以省略的
1)IP地址/域名省略:相當(dāng)于請?jiān)L問當(dāng)前服務(wù)器的地址(上一次獲取的).
2)端口號省略:瀏覽器會自動加上,HTTP自動添加80,HTTPS自動添加443.
3)帶層次的路徑省略:相當(dāng)于訪問根目錄(/),服務(wù)器主頁.
4)查詢字符串省略:后端自動處理.
d.URL encode:
例如'+' ':' '?' '&' '=' '#',還有中文都需要轉(zhuǎn)義.
以為網(wǎng)站可以查看轉(zhuǎn)義:URL encode轉(zhuǎn)義網(wǎng)站
5.method(方法):
a.
注意:最上面兩個(gè)最常用.
b.GET:"從服務(wù)器獲取xxx",
? ?POST:"向服務(wù)器傳輸一個(gè)xxx".
c. 一般來說
GET請求中body部分是空的,數(shù)據(jù)放在query string中.
POST請求使用的場景是登錄和上傳,有body(和query string很類似),但是query string是空的.
注意:GET和POST沒有本質(zhì)區(qū)別,兩者經(jīng)常相互替換,上述區(qū)別只是習(xí)慣,放在query string中用戶可以直接看到(收藏夾可以收藏),放在body則不行.
d.錯(cuò)誤的說法:
1)較長的數(shù)據(jù)放到body中,url有長度限制.?
2)POST比GET更安全.
注意:以上說法錯(cuò)誤.
e.需要注意的地方:
1)設(shè)計(jì)的時(shí)候,GET和POST語義不同,但是實(shí)踐中不一定要遵守.
2)GET是冪等的,POST不是冪等的,設(shè)計(jì)互聯(lián)網(wǎng)產(chǎn)品的時(shí)候,需要考慮冪等性,有的需要冪等(賬戶余額查詢),有的需要不冪等(廣告投放,不同地方廣告不同).
3)GET請求可以被緩存,POST不能緩存,但是GET緩存的前提是冪等.
f.其它方法(比較少見):
6.請求報(bào)頭(header):
a.采用鍵值對結(jié)構(gòu),每一行是一個(gè)鍵值對,鍵和值用":空格"分割.
b.query string / body 中的鍵值對完全由程序員自己定義,header中有標(biāo)準(zhǔn)定義的部分,也要自定義的部分.
c.重要的header規(guī)定:
1)Host:服務(wù)器主機(jī)地址和端口號.
注意:一般情況下,Host里的內(nèi)容和url是一樣的,但是如果使用了代理,就不一樣.
2)Content-Length:表示body中數(shù)據(jù)長度,為了解決粘包問題.
注意:如果沒有body,這個(gè)字段就沒有,如果有body,這個(gè)字段必須有,否則為非法請求.
3)Content-Type:表示請求body中數(shù)據(jù)格式.
4)User-Agent(簡稱UA):主要包含操作系統(tǒng)版本和瀏覽器版本,現(xiàn)在主要區(qū)分PC端和移動端.
5)Referer:描述了當(dāng)前網(wǎng)頁從哪里來.
如果從瀏覽器地址來直接輸入url,或者收藏夾打開的網(wǎng)站,沒有referer.
如果是點(diǎn)擊了網(wǎng)頁內(nèi)容,發(fā)生了跳轉(zhuǎn),referer就是剛才搜索的結(jié)果頁.
6)Cookie(重要):瀏覽器本地存儲數(shù)據(jù)的一種機(jī)制.???????
a)用戶訪問服務(wù)器的時(shí)候會產(chǎn)生一些臨時(shí)數(shù)據(jù),有的放在服務(wù)器儲存,有的在瀏覽器這邊儲存.
b)采用鍵值對儲存,這些數(shù)據(jù)通常是服務(wù)器返回的,不同的網(wǎng)站cookie是獨(dú)立的,內(nèi)容是程序員自定義的.
c)有一個(gè)很重要的鍵值對,用來表示用戶身份信息,有時(shí)候,登錄一個(gè)網(wǎng)站,再次訪問無需重新登陸.
d)實(shí)現(xiàn)身份識別,不僅僅需要cookie(客戶端),還需要session(服務(wù)器端),(類似于醫(yī)院看病,做檢查需要刷病歷卡),每個(gè)用戶都有自己的session(value),以sessionid(key)作為標(biāo)識,以類似hash的形式存儲數(shù)據(jù).
e)后續(xù)在訪問這個(gè)網(wǎng)站的頁面時(shí),就會在請求中帶上cookie,服務(wù)器就可以進(jìn)一步知道客戶端的詳細(xì)情況了.
7.響應(yīng)首行:HTTP版本號,狀態(tài)碼,狀態(tài)碼描述.
200 成功
404 訪問的資源不存在
403 訪問的資源沒有權(quán)限
502 服務(wù)器掛了
504 服務(wù)器響應(yīng)超時(shí)
302 重定向,跳轉(zhuǎn)至其他頁面
8.構(gòu)造HTTP請求?(html的form表單, js的ajax, 各種語言代碼, postman):
a.html的form表單(只能支持get和post兩者方法):
?
b.ajax:
1)搜索jQuery CDN,使用url:?https://code.jquery.com/jquery-3.7.1.min.js
9.http協(xié)議中使用到的鍵值對:
二.HTTPS(加密):
1.最簡單的加密方式是使用對稱密鑰(所以非對稱密鑰傳輸對稱密鑰):
不同的客戶端密鑰是不同的,如果客戶端生成了密鑰,就要把密鑰傳輸給服務(wù)器,但是黑客可能截獲密鑰.
所以要使用非對稱加密(公鑰和私鑰),將對稱加密的密鑰從客戶端傳輸?shù)椒?wù)器。
注意:非對稱加密,只傳輸對稱密鑰,之后所有的信息由對稱密鑰進(jìn)行加密,因?yàn)榉菍ΨQ密鑰的運(yùn)算量很大,效率很低,而對稱密鑰運(yùn)算量小,效率高.
2.上述的加密方式有一個(gè)很大的漏洞,黑客可以通過中間人攻擊的方式,仍然可以拿到密鑰:
?
3.解決上述問題,可以引入證書機(jī)制,使用第三方認(rèn)證:
a.服務(wù)器要在第三方公證機(jī)制申請一個(gè)證書,第三方機(jī)構(gòu)會審核服務(wù)器的資質(zhì).在這個(gè)證書中包括很多屬性,比如網(wǎng)站的域名,證書過期時(shí)間,公鑰,數(shù)字簽名等等.
b.客戶端想要和服務(wù)器進(jìn)行通信,發(fā)送請求之后,服務(wù)器會返回證書,這時(shí)客戶端會對證書進(jìn)行檢驗(yàn),因?yàn)榭蛻舳耸掷锍钟械谌秸J(rèn)證機(jī)構(gòu)的公鑰(這個(gè)公鑰不是通過網(wǎng)絡(luò)傳輸?shù)?而是直接系統(tǒng)內(nèi)置的,客戶端安裝了windows系統(tǒng),系統(tǒng)里就會內(nèi)置各種認(rèn)證機(jī)構(gòu)的公鑰,所以這個(gè)環(huán)節(jié)黑客無法攻擊),所以客戶端根據(jù)手里持有的認(rèn)證機(jī)構(gòu)的公鑰對數(shù)字簽名解密得到校驗(yàn)和的明文,根據(jù)相同的算法,對證書上的其他屬性再算一次校驗(yàn)和,對比是否相同.文章來源:http://www.zghlxwxcb.cn/news/detail-733354.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-733354.html
到了這里,關(guān)于9.3.5網(wǎng)絡(luò)原理(應(yīng)用層HTTP/HTTPS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!