文章目录
- 一、状态与会话
- 二、编码方案
- 2.1 URL编码
- 2.2 Unicode编码
- 2.3 HTML编码
- 2.4 Base64编码
- 2.5 十六进制编码
一、状态与会话
web应用程序服务器和客户端组件除了以各种方式进行数据交换和处理,应用程序还需要追踪每位用户通过不同的请求与应用程序交互的状态。例如,一个购物应用程序允许用户浏览产品目录、往购物车内添加商品、查看并更新购物车内容等。
为实现这些功能,应用程序必须维护一组在提交各种请求过程中由用户操作生成的有状态数据。这些数据通常保存在一个叫做会话的服务器端结构中,当用户执行一个操作时,服务器端应用程序会在用户会话内更新相关信息。以后用户查看购物车内的内容时,应用程序就使用会话中的数据向用户返回正确的信息。
二、编码方案
2.1 URL编码
URL只允许US-ASCII字符集中的可打印字符(也就是ASCII代码在0x20~0x7e范围内的字符),而且,由于其在URL方案或HTTP协议内具有特殊含义,这个范围内的一些字符也不能用在URL中。
URL编码方案主要用于对拓展ASCII字符集中的任何有问题的字符进行编码,使其可通过HTTP安全传输。任何URL编码都是以%为前缀,其后时这个字符的两位十六进制ASCII代码。常见的一些URL编码字符如下:
- %3d代表=;
- %25代表%;
- %20代表空格;
- %0a代表新行;
- %00代表空字节;
“+”也代表空格
2.2 Unicode编码
为方便HTTP传输,16位unicode编码的字符以%u为前缀,其后是这个字符的十六进制Unicode码点。例如:%u2215代表/。
UTF-8是一种长度可变的编码标准,它使用一个或多个字节表示每个字符,UTF-8编码的多字节字符以%为前缀,其后用十六进制表示每个字节,如:
2.3 HTML编码
HTML编码是一种用于表示问题字符以将其安全并入HTML文档的方案。有许多字符具有特殊的含义,并被用于定义文档结构而非其内容,为安全使用这些字符,就需要将其用在文档中,就需要对齐进行HTML编码。HTML编码定义了大量HTML实体来表示特殊的字面量字符,如:
此外,任何字符可以使用它的十进制ASCII码进行HTML编码,例如:
或者使用十六进制的ASCII码(以x为前缀),例如:
2.4 Base64编码
Base64编码仅用一个可打印的ASCII字符就可以安全转换成任何二进制数据,它常用于对电子邮件附件的编码,使其通过SMTP安全传输。它还可用于在基本HTTP验证机制中对用户证书进行编码。
Base64编码将输入数据转换成三个字节块,每个字节块被划分为四段,每段六个数据位。这六个数据位有64种不同的排列组合,因此每个段可以使用一组64个字符表示。Base64编码使用以下字符集,其中只包含可打印的ASCII字符:
如果最后的输入数据块不能构成三段输出数据,就用一个或两个等号(=)补足输出。
2.5 十六进制编码
许多应用程序在传送二进制数据时直接使用十六进制编码,用ASCII字符表示十六进制数据块。