序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程,对应的则是反序列化的过程,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
content-type 表示数据以什么样的方式进行编码。比如需要传递一个对象 User,这个对象有 2 个 key 和 2 个 value。
let user = {
"name": "justjavac",
"age": 18
}
在内存中这个对象不仅仅只有这 2 个属性,还有原型链以及其他一些对象的状态信息和内存布局信息。然而我们只需要传输或者存储这 2 个信息,也就是说我们要对 User 的这 2 个属性进行序列化。
而编码就涉及到,我们如何将这个对象通过网络进行传输,为了确保接收方(服务器)能够正确的解码这个对象,我们不仅仅要发送序列化的字符串,还要发送 content-type,告知对方以何种方式进行解码。
我们可以编码为:
name:justjavac
age:18
或者
name=justjavac&age=18
或者
name:justjavac;age=18
服务器接收到数据后,再根据 content-type 的编码类型进行解码。
浏览器和服务器只支持第二种,这种方式的优势是发送的数据量少,缺点是没有类型信息。服务器接收到数据后,根据约定转化为对应的类型(此类型不必和前端 js 一一对应)。
另一种编码就是 json,发送数据为:
{"name":"justjavac","age":18}
这种方式包含了类型信息。
此外 http 还支持另外的 2 中编码方式(共4种)。
此外,如果你的业务涉及到加密或者更优秀的编码方式,也可以使用 raw 方式传递原始字符串数据,然后前后端约定编码/解码算法。
比如传递
u^3hpo)4hAU
以上。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…