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码字符进行编码

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