比如,A 給 B發送了一條信息:hello,首先,A要告訴B,我給你發的這條數據的類型,不同類型的數據,接收方的處理方式不一樣,hello屬於文本類型,所以Content-Type就要設置成
text-plain; 但是計算機只知道0和1,所以就按照一定的規則把 hello 變成0和1組成的代碼,所使用的規則也要在Content-Type里設置,比如A將hello用iso-8859-1方式編碼轉為0和1的組合,為:
0110100001100101011011000110110001101111,
按照8位1字節來分,可以分成5個字節:
01101000 01100101 01101100 01101100 01101111
h e l l o
所以,完整的Content-Type應該為:
Content-Type:text/plain;charset=iso-8859-1
接着,假如A還需要對hello進行壓縮呢?於是,A先用壓縮算法對hello進行壓縮,比如A用了gzip算法,完了之后,原先用iso-8859-1方式編碼的hello二進制串已經發生了改變,A不能直接把壓縮后的內容直接發給B,而是應該告訴B,我對傳輸的數據進行了壓縮,
所以A還要設置Content-Encoding為 gzip,體現在A的報文里面為:Content-Encoding: gzip
設置完Content-Type和Content-Encoding,A就把hello發給了B。
當B接收到A發送的數據后,先看Content-Encoding有沒有值,
這里由於A已經設置了Content-Encoding:gzip,所以B首先要對A發送的內容進行解壓縮,解壓縮的算法和A采取的壓縮算法要對應,這里B就采取了gzip的解壓算法,得到了壓縮之前的一串0和1組成的代碼(0110100001100101011011000110110001101111),然后B就能順利地按照每8位一字節的方式來解析這串2進制代碼,B先看Content-Type第一個分號前的內容是
text/plain,知道A這是發送了一段文本數據,接着看分號后面是
charset=iso-8859-1,知道了A是用iso-8859-1方式編碼的,那么B就相應的用iso-8859-1的方式來解碼,最后得到人類可識別的數據 ”hello”
————————————————
版權聲明:本文為CSDN博主「偏執的執」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34967644/article/details/86680061