HTTP協議的解碼和編碼


相當於各省各地的人說不同的話,大家互相聽不懂,那麼http就相當於有一個翻譯器,能夠編碼解碼。

編碼規範

在這裏插入圖片描述
每套編碼規範都有自己使用的場景,字庫表存儲了編碼規範中能夠所有能夠表示的字(比如:所有的漢字都在gbk編碼規範的字庫表裏),在一個組庫表,每一個字都有對應的二進制數,這些二進制數存儲在字符集中。字庫表和字符集一一對應,相互轉換。
不同編碼規範節省得空間也不一樣,一個較短的二進制數通過一種編碼方式轉化成字符集中對應的地址,然後在字庫表中找到一個字符,顯示給用戶

常見的編碼規範有:
在這裏插入圖片描述ASCII碼:
它用 7 個二進制位來表示,由於那個時期生產的大多數計算機使用 8 位大小的字節,因此用戶不僅可以存放所有 可能的ASCII字符,而且有整整一位空餘下來。如果你技藝高超,可以將該位用做自己離奇的目的。

ASCII第一次以規範標準的類型發表是在 1967年,最後一次更新則是在 1986年,到目前爲止共定義了 128個字符。

作用: 表語英語及西歐語言。

位數: ASCII是用 7位表示的,能表示 128個 字符;其擴展使用 8位表示,表示 256個字符。

範圍: ASCII從00到7F,擴展從00到FF。

一個英文字母(不分大小寫)佔一個字節的空間,一箇中文漢字佔兩個字節的空間。

GBK 編碼標準:

兼容GB2312、GB13000-1、BIG5 編碼中的所有漢字,使用雙字節編碼

編碼空間爲 0x8140~0xFEFE,共有 23940 個碼位,
其中 GBK1 區和 GBK2 區也是 GB2312 的編碼範圍。收錄了 21003 個漢字。

iso8859-1

屬於單字節編碼,最多能表示的字符範圍是0-255,應用於英文系列。比如,字母’a’的編碼爲0x61=97。

iso8859-1編碼表示的字符範圍很窄,無法表示中文字符。
由於是單字節編碼,和計算機最基礎的表示單位一致,所以很多時候,仍舊使用iso8859-1編碼來表示。
把其他任何編碼當做iso8859-1來解碼的時候,都能解開,也是MYSQL的默認編碼
位數:8位,
範圍:從00到FF,兼容ASCII字符集。
英文 一個字節,不支持中文

Unicode編碼:

Unicode字符集(簡稱爲UCS),國際標準組織於1984年4月成立 ISO/IEC JTC1/SC2/WG2工作組,針對各國文字、符號進行統一性編碼。

Unicode編碼後的大小是一樣的:
例如 一個英文字母 “a” 和 一個漢字 “好”,編碼後都是佔用的空間大小是一樣的,都是兩個字節

Unicode可以用來表示所有語言的字符:
而且是定長雙字節(也有四字節的)編碼,包括英文字母在內。
所以可以說它是不兼容iso8859-1編碼的, 也不兼容任何編碼。不過,相對於iso8859-1編碼來說,uniocode編碼只是在前面增加了一個0字節,比如字母’a’爲"00 61"。定長編碼便於計算機處理(注意GB2312/GBK不是定長編碼),而unicode又可以用來表示所有字符,所以在很多軟件內部是使用unicode編碼來處理的,比如java。

UNICODE字符集有多個編碼方式:
分別是UTF-8,UTF-16,UTF-32和UTF-7編碼。

作用:亞 美 採用同一編碼字集。

位數:16位,

範圍:符號 6811個,漢字 20902個,韓文拼音 11172個,造字區 6400個,保留 20249個,共計 65534個。

英文 中文都佔用兩個字節,中英各自標點符號也是如此

UTF-8:

UTF:UCS Transformation Format.考慮到 unicode編碼不兼容iso8859-1編碼,而且容易佔用更多的空間。因爲對於英文字母,unicode也需要兩個字節來表 示。所以unicode不便於傳輸和存儲。因此而產生了utf編碼。

utf編碼兼容iso8859-1編碼,同時也可以用來表示所有語言的字符,
utf編碼是不定長編碼,每一個字符的長度從1-6個字節不等。
另外utf編碼自帶簡單的校驗功能。一般來講,英文字母都是用一個字節表示,而漢字 使用三個字節。
注意,雖然說utf是爲了使用更少的空間而使用的,但那只是相對於unicode編碼來說,如果已經知道是漢字,則使用GB2312/GBK無疑是 最節省的。

URL的編碼與解碼

◆URL是採用ASCII字符集進行編碼的,所以如果URL中含有非
ASCI字符集中的字符,要對其進行編碼。
◆URL中一 些保留字符,如"&”表示參數分隔符,如果想要在URL中使用這些保留字,那就需要編碼。

◆“%編碼” 規範
◆對URL中屬於ASCII字符集的非保留字不做編碼;對URL中的保留字需要取其ASCI內碼,然後加上”%” 前綴將該字符進行編碼;對於URL中的非ASCII字符需要取其Unicode內碼,然後加上“%" 前綴將該字符進行編碼。

“%編碼” 規範實戰:使用fiddler來抓住http請求

當打開fiddler,fiddler會自動添加對應的代理在瀏覽器上
在這裏插入圖片描述訪問webtours:
在這裏插入圖片描述
抓到了webtour的請求

在這裏插入圖片描述
加上username=承承
在這裏插入圖片描述

捕捉到的請求對中文百分號加密:
在這裏插入圖片描述

將加密的%編碼 E6%89%BF%E6%89%BF寫入url中:
在這裏插入圖片描述

發現沒有再次被編碼,只被編碼了一次:
在這裏插入圖片描述

表明瀏覽器只對url中的非ASCII碼字符進行編碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章