摘要:包含的協(xié)議協(xié)議。表示發(fā)送端發(fā)送數(shù)據(jù)到接收到對(duì)端數(shù)據(jù)所需的往返時(shí)間在中使用了兩種加密技術(shù),分別為對(duì)稱加密和非對(duì)稱加密。
一、前言
主要包括:1、http基礎(chǔ):TCP/IP,TCP協(xié)議,IP協(xié)議,DNS協(xié)議,URI與URL;
2、http協(xié)議:http報(bào)文,http方法,http狀態(tài)碼,常見問題
名詞解釋:
(1)HTTP(HyperText Transfer Protocol)超文本傳輸協(xié)議
(2)URL(Uniform Resource Locator)統(tǒng)一資源定位符
(3)URI(Uniform Resource Identifer)統(tǒng)一資源標(biāo)識(shí)符
(4)TCP(Transmission Control Protocol)傳輸控制協(xié)議
(5)IP(Internet Protocol)網(wǎng)際協(xié)議
(6)UDP(User Data Protocol)用戶數(shù)據(jù)報(bào)協(xié)議
(7)MAC地址(Media Access Control)媒體訪問控制地址/物理地址/硬件地址
(8)ARP協(xié)議(Address Resolution Protocol)地址解析協(xié)議
二、HTTP基礎(chǔ) 2.1TCP/IPTCP/IP是互聯(lián)網(wǎng)相關(guān)的各類協(xié)議族的總稱,而http是TCP/IP協(xié)議族中的一個(gè)子集。
TCP/IP協(xié)議族可以分為四層:
(1)應(yīng)用層:決定向用戶提供應(yīng)用服務(wù)時(shí)通信的活動(dòng),TCP/IP協(xié)議族內(nèi)預(yù)存了各類通用的應(yīng)用服務(wù),如:http,ftp,dns等。
(2)傳輸層:提供處于網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸,包含兩個(gè)協(xié)議:tcp,udp。
(3)網(wǎng)絡(luò)層:用來處理網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包,在眾多的選項(xiàng)中選擇一條傳輸線路,將數(shù)據(jù)包傳送到對(duì)方計(jì)算機(jī)。包含的協(xié)議:IP協(xié)議。
(4)數(shù)據(jù)鏈路層:用來處理連接網(wǎng)絡(luò)的硬件部分。
2.2 IP協(xié)議IP協(xié)議屬于網(wǎng)絡(luò)層,負(fù)責(zé)處理網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包。為了保證傳送成功,需要滿足各類條件,其中兩個(gè)重要的條件時(shí)IP地址和MAC地址。
(1)IP地址,指明了節(jié)點(diǎn)被分配到的地址;
(2)MAC地址,指網(wǎng)卡所屬的固定地址;
(3)IP地址可以和MAC地址進(jìn)行配對(duì),IP地址可以變換,但是MAC地址基本上不會(huì)更改;
(4)使用ARP地址解析協(xié)議可以根據(jù)通信方的IP地址反查出對(duì)應(yīng)的MAC地址
2.3 TCP協(xié)議TCP協(xié)議位于傳輸層,提供可靠的字節(jié)流服務(wù)(也就是說,將大數(shù)據(jù)分隔成以報(bào)文段為單位的數(shù)據(jù)包進(jìn)行管理)。
為了確保數(shù)據(jù)準(zhǔn)確無誤的到達(dá)目標(biāo)處,TCP協(xié)議通常采用三次握手策略。
如果在握手的過程中某一個(gè)階段莫名的中斷了,TCP協(xié)議會(huì)再次以相同的順序發(fā)送相同的數(shù)據(jù)包。
2.4DNS協(xié)議DNS協(xié)議位于應(yīng)用層,提供域名到IP地址之間的解析服務(wù)。
2.5 URI和URLURI是某一個(gè)協(xié)議方案表示的資源的定位標(biāo)識(shí)符,協(xié)議方案是指訪問資源所使用的協(xié)議類型,如:http,ftp,file等。
URL用字符串標(biāo)識(shí)某一個(gè)互聯(lián)網(wǎng)資源,而URL表示資源的地點(diǎn),URL是URI的子集。
2.6 HTTP協(xié)議HTTP協(xié)議用于客戶端和服務(wù)器端之間的通信。請(qǐng)求必定由客戶端發(fā)出,而服務(wù)器端回復(fù)響應(yīng)。
HTTP協(xié)議不保存狀態(tài),為無狀態(tài)協(xié)議。這是為了更快的處理大量事務(wù),確保協(xié)議的可伸縮性而特意設(shè)計(jì)的。
但是隨著Web的不斷發(fā)展,這一特性也引發(fā)了一些問題,如:如何保持登錄狀態(tài)、如何記錄用戶信息等,為了解決這一問題,引入了Cookie技術(shù)。
2.6.1常見狀態(tài)碼
2XX 成功
200 OK,表示從客戶端發(fā)來的請(qǐng)求在服務(wù)器端被正確處理
204 No content,表示請(qǐng)求成功,但響應(yīng)報(bào)文不含實(shí)體的主體部分
205 Reset Content,表示請(qǐng)求成功,但響應(yīng)報(bào)文不含實(shí)體的主體部分,但是與 204 響應(yīng)不同在于要求請(qǐng)求方重置內(nèi)容
206 Partial Content,進(jìn)行范圍請(qǐng)求
3XX 重定向
301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
302 found,臨時(shí)性重定向,表示資源臨時(shí)被分配了新的 URL
303 see other,表示資源存在著另一個(gè) URL,應(yīng)使用 GET 方法獲取資源
304 not modified,表示服務(wù)器允許訪問資源,但因發(fā)生請(qǐng)求未滿足條件的情況
307 temporary redirect,臨時(shí)重定向,和302含義類似,但是期望客戶端保持請(qǐng)求方法不變向新的地址發(fā)出請(qǐng)求
4XX 客戶端錯(cuò)誤
400 bad request,請(qǐng)求報(bào)文存在語法錯(cuò)誤
401 unauthorized,表示發(fā)送的請(qǐng)求需要有通過 HTTP 認(rèn)證的認(rèn)證信息
403 forbidden,表示對(duì)請(qǐng)求資源的訪問被服務(wù)器拒絕
404 not found,表示在服務(wù)器上沒有找到請(qǐng)求的資源
5XX 服務(wù)器錯(cuò)誤
500 internal sever error,表示服務(wù)器端在執(zhí)行請(qǐng)求時(shí)發(fā)生了錯(cuò)誤
501 Not Implemented,表示服務(wù)器不支持當(dāng)前請(qǐng)求所需要的某個(gè)功能
503 service unavailable,表明服務(wù)器暫時(shí)處于超負(fù)載或正在停機(jī)維護(hù),無法處理請(qǐng)求
2.6.2HTTP報(bào)文頭部(HTTP首部)
通用字段 作用
Cache-Control 控制緩存的行為
Connection 瀏覽器想要優(yōu)先使用的連接類型,比如:keep-alive
Date 創(chuàng)建報(bào)文時(shí)間
Pragma 報(bào)文指令
Via 代理服務(wù)器相關(guān)信息
Transfer-Encoding 傳輸編碼方式
Upgrade 要求客戶端升級(jí)協(xié)議
Warning 在內(nèi)容中可能存在錯(cuò)誤
請(qǐng)求字段 作用
Accept 能正確接收的媒體類型
Accept-Charset
能正確接收的字符集
Accept-Encoding 能正確接收的編碼格式列表
Accept-Language 能正確接收的語言列表
Expect 期待服務(wù)端的指定行為
From 請(qǐng)求方郵箱地址
Host 服務(wù)器的域名
If-Match 兩端資源標(biāo)記比較
If-Modified-Since 本地資源未修改返回 304(比較時(shí)間)
If-None-Match 本地資源未修改返回 304(比較標(biāo)記)
User-Agent 客戶端信息
Max-Forwards 限制可被代理及網(wǎng)關(guān)轉(zhuǎn)發(fā)的次數(shù)
Proxy-Authorization 向代理服務(wù)器發(fā)送驗(yàn)證信息
Range 請(qǐng)求某個(gè)內(nèi)容的一部分
Referer 示瀏覽器所訪問的前一個(gè)頁面
TE 傳輸編碼方式
響應(yīng)字段 作用
Accept-Ranges 是否支持某些種類的范圍
Age 資源在代理緩存中存在的時(shí)間
ETag 資源標(biāo)識(shí)
Location 客戶端重定向到某個(gè) URL
Proxy-Authenticate 向代理服務(wù)器發(fā)送驗(yàn)證信息
Server 服務(wù)器名字
WWW-Authenticate 獲取資源需要的驗(yàn)證信息
實(shí)體字段 作用
Allow 資源的正確請(qǐng)求方式
Content-Encoding 內(nèi)容的編碼格式
Content-Language 內(nèi)容使用的語言
Content-Length request body 長(zhǎng)度
Content-Location 返回?cái)?shù)據(jù)的備用地址
Content-MD5 Base64加密格式的內(nèi)容 MD5檢驗(yàn)值
Content-Range 內(nèi)容的位置范圍
Content-Type 內(nèi)容的媒體類型
Expires 內(nèi)容的過期時(shí)間
Last_modified 內(nèi)容的最后修改時(shí)間
2.6.3 HTTP方法
方法名稱 方法描述
GET 獲取資源
POST 傳輸實(shí)體主體
PUT 傳輸文件,自身不帶驗(yàn)證機(jī)制 ,在無驗(yàn)證機(jī)制或不遵守REST標(biāo)準(zhǔn)時(shí)不建議使用
DELETE 刪除文件,自身不帶驗(yàn)證機(jī)制
HEAD 獲取報(bào)文首部,和GET方法一樣,不返回報(bào)文主體部分
OPTIONS 詢問支持的方法,返回服務(wù)器所支持的方法
TRACE 追蹤路徑,可以通過該方法查詢發(fā)送出去的請(qǐng)求是如何被加工修改或篡改的。容易引發(fā)XST攻擊,不常用。
CONNECT 要求用隧道協(xié)議連接代理
HTTPS 還是通過了 HTTP 來傳輸信息,但是信息通過 TLS 協(xié)議進(jìn)行了加密。
3.1 TLSTLS 協(xié)議位于傳輸層之上,應(yīng)用層之下。首次進(jìn)行 TLS 協(xié)議傳輸需要兩個(gè) RTT ,接下來可以通過 Session Resumption 減少到一個(gè) RTT。(RTT表示發(fā)送端發(fā)送數(shù)據(jù)到接收到對(duì)端數(shù)據(jù)所需的往返時(shí)間)
在 TLS 中使用了兩種加密技術(shù),分別為:對(duì)稱加密和非對(duì)稱加密。
對(duì)稱加密:
對(duì)稱加密就是兩邊擁有相同的秘鑰,兩邊都知道如何將密文加密解密。
非對(duì)稱加密:
有公鑰私鑰之分,公鑰所有人都可以知道,可以將數(shù)據(jù)用公鑰加密,但是將數(shù)據(jù)解密必須使用私鑰解密,私鑰只有分發(fā)公鑰的一方才知道。
3.2 TLS 握手過程如下圖:(1)客戶端發(fā)送一個(gè)隨機(jī)值,需要的協(xié)議和加密方式
(2)服務(wù)端收到客戶端的隨機(jī)值,自己也產(chǎn)生一個(gè)隨機(jī)值,并根據(jù)客戶端需求的協(xié)議和加密方式來使用對(duì)應(yīng)的方式,發(fā)送自己的證書(如果需要驗(yàn)證客戶端證書需要說明)
(3)客戶端收到服務(wù)端的證書并驗(yàn)證是否有效,驗(yàn)證通過會(huì)再生成一個(gè)隨機(jī)值,通過服務(wù)端證書的公鑰去加密這個(gè)隨機(jī)值并發(fā)送給服務(wù)端,如果服務(wù)端需要驗(yàn)證客戶端證書的話會(huì)附帶證書
(4)服務(wù)端收到加密過的隨機(jī)值并使用私鑰解密獲得第三個(gè)隨機(jī)值,這時(shí)候兩端都擁有了三個(gè)隨機(jī)值,可以通過這三個(gè)隨機(jī)值按照之前約定的加密方式生成密鑰,接下來的通信就可以通過該密鑰來加密解密
通過以上步驟可知,在 TLS 握手階段,兩端使用非對(duì)稱加密的方式來通信,但是因?yàn)榉菍?duì)稱加密損耗的性能比對(duì)稱加密大,所以在正式傳輸數(shù)據(jù)時(shí),兩端使用對(duì)稱加密的方式通信。
PS:以上說明的都是 TLS 1.2 協(xié)議的握手情況,在 1.3 協(xié)議中,首次建立連接只需要一個(gè) RTT,后面恢復(fù)連接不需要 RTT 了。
四、GET和POST的區(qū)別從技術(shù)上說:
1、get請(qǐng)求能緩存,post不能;
2、post相對(duì)于get來說,安全一點(diǎn)點(diǎn),因?yàn)間et請(qǐng)求都會(huì)包含在URL里,會(huì)被瀏覽器保存歷史記錄,post不會(huì),但是在抓包的情況是一樣的。
3、post可以request body來傳遞比get更多的數(shù)據(jù),get米有這個(gè)技術(shù)。
4、url長(zhǎng)度有限制,會(huì)影響get請(qǐng)求,長(zhǎng)度限制是瀏覽器限制規(guī)定的,不是rfc(互聯(lián)網(wǎng)通信協(xié)議)規(guī)定的。
5、post支持更多的編碼類型且不對(duì)數(shù)據(jù)類型限制
五、參考1、https://github.com/junruchen/...
2、https://www.cnblogs.com/Leo_w...
【注:我是saucxs,也叫songEagle,松寶寫代碼,文章首發(fā)于sau交流學(xué)習(xí)社區(qū) https://www.mwcxs.top ,關(guān)注我們每天閱讀更多精彩內(nèi)容】
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104889.html
摘要:我的學(xué)習(xí)筆記匯總標(biāo)簽筆記分為兩大部分和筆記內(nèi)容主要是對(duì)一些基礎(chǔ)特性和編程細(xì)節(jié)進(jìn)行總結(jié)整理,適合了解基礎(chǔ)語法,想進(jìn)一步深入學(xué)習(xí)的人如果覺得不錯(cuò),請(qǐng)給,這也是對(duì)我的鼓勵(lì),有什么意見歡迎留言反饋目錄基礎(chǔ)鞏固筆記反射基礎(chǔ)鞏固筆記泛型基礎(chǔ)鞏 我的java&javaweb學(xué)習(xí)筆記(匯總) 標(biāo)簽: java [TOC] 筆記分為兩大部分:javase和javaweb javase javawe...
摘要:當(dāng)某個(gè)類型變量只在整個(gè)參數(shù)列表的所有參數(shù)和返回值中的一處被應(yīng)用了,那么根據(jù)調(diào)用方法時(shí)該處的實(shí)際應(yīng)用類型來確定。即直接根據(jù)調(diào)用方法時(shí)傳遞的參數(shù)類型或返回值來決定泛型參數(shù)的類型。 標(biāo)簽: java [TOC] 本文對(duì)泛型的基本知識(shí)進(jìn)行較為全面的總結(jié),并附上簡(jiǎn)短的代碼實(shí)例,加深記憶。 泛型 將集合中的元素限定為一個(gè)特定的類型。 術(shù)語 ArrayList -- 泛型類型 ArrayLis...
摘要:基礎(chǔ)鞏固基礎(chǔ)總結(jié)使用已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)的使用范圍原來越廣泛。這里要注意,務(wù)必將基礎(chǔ)部分掌握牢靠,磨刀不誤砍柴功,只有將基礎(chǔ)部分掌握并建立起系統(tǒng)的知識(shí)體系,在后面學(xué)習(xí)衍生的其他模式才能游刃有余。 基礎(chǔ)鞏固:JavaScript基礎(chǔ)總結(jié) 使用JavaScript已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)JavaScript的使用范圍原...
摘要:基礎(chǔ)語法鞏固正則表達(dá)式引擎根據(jù)正則去匹配字符的時(shí)候,是通過檢查索引的方式。妻原配就是好,可以直接使用正則表達(dá)式調(diào)用它。下面解釋一下上面這些常用的元字符查找單個(gè)字符,除了換行和行結(jié)束符。正則系列文章整理到了 上一章內(nèi)容:正則表達(dá)式實(shí)戰(zhàn)篇 知識(shí)回顧 前2章分別學(xué)習(xí)了正則表達(dá)式入門技巧,以及遇到正則需求該如何去分析問題,還有正則表達(dá)式實(shí)戰(zhàn)的一些場(chǎng)景解釋。 這一章內(nèi)容偏向理論,推薦你點(diǎn)擊開頭的...
閱讀 3298·2021-10-11 11:08
閱讀 4439·2021-09-22 15:54
閱讀 922·2019-08-30 15:56
閱讀 876·2019-08-30 15:55
閱讀 3549·2019-08-30 15:52
閱讀 1360·2019-08-30 15:43
閱讀 1943·2019-08-30 11:14
閱讀 2513·2019-08-29 16:11