-
網(wǎng)絡(luò)分類(lèi):
68747470733a2f2f67697465652e636f6d2f437943323031382f43532d4e6f7465732f7261772f6d61737465722f646f63732f706963732f63626635306562382d323262342d343532382d613265372d6431383731343364353766372e706e67.png
- HTTP狀態(tài)碼
| 狀態(tài)碼 | 類(lèi)別 | 含義 |
|---|---|---|
| 1XX | Informational(信息性狀態(tài)碼) | 接收的請(qǐng)求正在處理 |
| 2XX | Success(成功狀態(tài)碼) | 請(qǐng)求正常處理完畢 |
| 3XX | Redirection(重定向狀態(tài)碼) | 需要進(jìn)行附加操作以完成請(qǐng)求 |
| 4XX | Client Error(客戶端錯(cuò)誤狀態(tài)碼) | 服務(wù)器無(wú)法處理請(qǐng)求 |
| 5XX | Server Error(服務(wù)器錯(cuò)誤狀態(tài)碼) | 服務(wù)器處理請(qǐng)求出錯(cuò) |
-
Cookie VS. Session
Cookie 是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù),它會(huì)在瀏覽器之后向同一服務(wù)器再次發(fā)起請(qǐng)求時(shí)被攜帶上,用于告知服務(wù)端兩個(gè)請(qǐng)求是否來(lái)自同一瀏覽器。由于之后每次請(qǐng)求都會(huì)需要攜帶 Cookie 數(shù)據(jù),因此會(huì)帶來(lái)額外的性能開(kāi)銷(xiāo)(尤其是在移動(dòng)環(huán)境下)。
Session 將信息存儲(chǔ)在服務(wù)器端,可以存儲(chǔ)在服務(wù)器上的文件、數(shù)據(jù)庫(kù)或者內(nèi)存中。也可以將 Session 存儲(chǔ)在 Redis 這種內(nèi)存型數(shù)據(jù)庫(kù)中,效率會(huì)更高。
u=635969339,977853545&fm=173&app=49&f=JPEG.jpeg
Cookie 只能存儲(chǔ) ASCII 碼字符串,而 Session 則可以存取任何類(lèi)型的數(shù)據(jù),因此在考慮數(shù)據(jù)復(fù)雜性時(shí)首選 Session;
Cookie 存儲(chǔ)在瀏覽器中,容易被惡意查看。如果非要將一些隱私數(shù)據(jù)存在 Cookie 中,可以將 Cookie 值進(jìn)行加密,然后在服務(wù)器進(jìn)行解密;
對(duì)于大型網(wǎng)站,如果用戶所有的信息都存儲(chǔ)在 Session 中,那么開(kāi)銷(xiāo)是非常大的,因此不建議將所有的用戶信息都存儲(chǔ)到 Session 中。 緩存
1)優(yōu)點(diǎn):緩解服務(wù)器壓力,降低客戶端獲取資源的延遲。
2)實(shí)現(xiàn)方法:讓代理服務(wù)器進(jìn)行緩存,讓客戶端瀏覽器進(jìn)行緩存。
3)Cache-Control虛擬主機(jī):
1)使用虛擬主機(jī)技術(shù),可以使得一臺(tái)服務(wù)器擁有多個(gè)域名,并且在邏輯上可以看成多個(gè)服務(wù)器。
2)代理:代理服務(wù)器接受客戶端的請(qǐng)求,并且轉(zhuǎn)發(fā)給其他服務(wù)器。
目的:緩存;負(fù)載均衡;網(wǎng)絡(luò)訪問(wèn)控制;訪問(wèn)日志記錄。
3)網(wǎng)關(guān):
4)隧道:使用SSL等加密手段,在客戶端和服務(wù)器之間建立一條安全的通信線路。HTTPS:
1)HTTP先和SSL(Secure Sockets Layer)通信,再由SSL和TCP通信。(即使用了隧道進(jìn)行通信)
2)通過(guò)使用SSL,HTTPS具有了加密(防竊聽(tīng)),認(rèn)證(防偽裝),和完整性保護(hù)(防篡改)。-
TCP三次握手:
每一次TCP傳輸都包括三個(gè)階段:建立連接(三次握手)、數(shù)據(jù)傳送和連接釋放(四次握手)。
0325-01.jpg
0325-02.jpg
SYN:代表請(qǐng)求創(chuàng)建連接,所以在三次握手中前兩次要SYN=1,表示這兩次用于建立連接,至于第三次什么用,在疑問(wèn)三里解答。
FIN:表示請(qǐng)求關(guān)閉連接,在四次分手時(shí),我們發(fā)現(xiàn)FIN發(fā)了兩遍。這是因?yàn)門(mén)CP的連接是雙向的,所以一次FIN只能關(guān)閉一個(gè)方向。
ACK:代表確認(rèn)接受,從上面可以發(fā)現(xiàn),不管是三次握手還是四次分手,在回應(yīng)的時(shí)候都會(huì)加上ACK=1,表示消息接收到了,并且在建立連接以后的發(fā)送數(shù)據(jù)時(shí),都需加上ACK=1,來(lái)表示數(shù)據(jù)接收成功。
seq:序列號(hào),什么意思呢?當(dāng)發(fā)送一個(gè)數(shù)據(jù)時(shí),數(shù)據(jù)是被拆成多個(gè)數(shù)據(jù)包來(lái)發(fā)送,序列號(hào)就是對(duì)每個(gè)數(shù)據(jù)包進(jìn)行編號(hào),這樣接受方才能對(duì)數(shù)據(jù)包進(jìn)行再次拼接。
初始序列號(hào)是隨機(jī)生成的,這樣不一樣的數(shù)據(jù)拆包解包就不會(huì)連接錯(cuò)了。(例如:兩個(gè)數(shù)據(jù)都被拆成1,2,3和一個(gè)數(shù)據(jù)是1,2,3一個(gè)是101,102,103,很明顯后者不會(huì)連接錯(cuò)誤)
ack:這個(gè)代表下一個(gè)數(shù)據(jù)包的編號(hào),這也就是為什么第二請(qǐng)求時(shí),ack是seq+1。
三次握手:在創(chuàng)建連接時(shí),
1.客戶端首先要SYN=1,表示要?jiǎng)?chuàng)建連接,
2.服務(wù)端接收到后,要告訴客戶端:我接受到了!所以加個(gè)ACK=1,就變成了ACK=1,SYN=1
3.理論上這時(shí)就創(chuàng)建連接成功了,但是要防止一個(gè)意外(見(jiàn)疑問(wèn)三),所以客戶端要再發(fā)一個(gè)消息給服務(wù)端確認(rèn)一下,這時(shí)只需要ACK=1就行了。
四次分手:
1.首先客戶端請(qǐng)求關(guān)閉客戶端到服務(wù)端方向的連接,這時(shí)客戶端就要發(fā)送一個(gè)FIN=1,表示要關(guān)閉一個(gè)方向的連接(見(jiàn)上面四次分手的圖)
2.服務(wù)端接收到后是需要確認(rèn)一下的,所以返回了一個(gè)ACK=1
3.這時(shí)只關(guān)閉了一個(gè)方向,另一個(gè)方向也需要關(guān)閉,所以服務(wù)端也向客戶端發(fā)了一個(gè)FIN=1 ACK=1
4.客戶端接收到后發(fā)送ACK=1,表示接受成功。
為什么需要三次握手,兩次握手不行嗎?
如果發(fā)送兩次就可以建立連接話,那么只要客戶端發(fā)送一個(gè)連接請(qǐng)求,服務(wù)端接收到并發(fā)送了確認(rèn),就會(huì)建立一個(gè)連接。
可能出現(xiàn)的問(wèn)題:如果一個(gè)連接請(qǐng)求在網(wǎng)絡(luò)中跑的慢,超時(shí)了,這時(shí)客戶端會(huì)從發(fā)請(qǐng)求,但是這個(gè)跑的慢的請(qǐng)求最后還是跑到了,然后服務(wù)端就接收了兩個(gè)連接請(qǐng)求,然后全部回應(yīng)就會(huì)創(chuàng)建兩個(gè)連接,浪費(fèi)資源!
如果加了第三次客戶端確認(rèn),客戶端在接受到一個(gè)服務(wù)端連接確認(rèn)請(qǐng)求后,后面再接收到的連接確認(rèn)請(qǐng)求就可以拋棄不管了。
為什么需要四次分手
TCP是雙向的,所以需要在兩個(gè)方向分別關(guān)閉,每個(gè)方向的關(guān)閉又需要請(qǐng)求和確認(rèn),所以一共就4次。



