最近用axios发现了序列化这三个字,很好奇,上网搜了下出现什么编码,字节,二进制数据流,直接懵了。
什么是序列化,为什么需要序列化?
content-type和序列化有啥关系吗?
当content-type为form-url-encoded的时候,我看数据格式是用&符号连接的,这种格式的数据和json一样也是字符串吗?
基础不太好,求大佬指教了!
最近用axios发现了序列化这三个字,很好奇,上网搜了下出现什么编码,字节,二进制数据流,直接懵了。
什么是序列化,为什么需要序列化?
content-type和序列化有啥关系吗?
当content-type为form-url-encoded的时候,我看数据格式是用&符号连接的,这种格式的数据和json一样也是字符串吗?
基础不太好,求大佬指教了!
序列化与反序列化 是数据存储、传输中常见的概念。
需要知道 数据存储和传输中受一些限制,很多时候并不能直接保存内存中的一些数据(包括数据结构),这时,把内存中的 数据 转换为 一种适合传输存储的 数据格式(数据流、数据报......)就称为 内存数据的序列化, 再把这样的数据 恢复为内存中 相应程序可以直接使用的数据过程 就称为 反序列化。
实际上这样 是一种数据 从内存数据 传输数据(存储数据)的一种处理机制,没有完全统一的标准,在不同的处理中可以表现为不同的实现,比如不同的传输协议、存储数据组织等等。
一般在http传输领域,因为可能传输处理的内容格式太丰富了,就约定了常见的一些数据内容 传输中的 标识,它就反映为 content-type
,它涉及了数据主体内容大致数据类型,对文本类数据还可以明确编码体系。
form-url-encoded
估计是form-urlencoded
的误写,它一般表明传输中的涉及表单URL信息是经过再编码处理的,具体可以参考application/x-www-form-urlencoded
,它指URL信息中非ANSCII字符是编码过的。
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程,对应的则是反序列化的过程,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
content-type 表示数据以什么样的方式进行编码。比如需要传递一个对象 User,这个对象有 2 个 key 和 2 个 value。
在内存中这个对象不仅仅只有这 2 个属性,还有原型链以及其他一些对象的状态信息和内存布局信息。然而我们只需要传输或者存储这 2 个信息,也就是说我们要对 User 的这 2 个属性进行序列化。
而编码就涉及到,我们如何将这个对象通过网络进行传输,为了确保接收方(服务器)能够正确的解码这个对象,我们不仅仅要发送序列化的字符串,还要发送 content-type,告知对方以何种方式进行解码。
我们可以编码为:
或者
或者
服务器接收到数据后,再根据 content-type 的编码类型进行解码。
浏览器和服务器只支持第二种,这种方式的优势是发送的数据量少,缺点是没有类型信息。服务器接收到数据后,根据约定转化为对应的类型(此类型不必和前端 js 一一对应)。
另一种编码就是 json,发送数据为:
这种方式包含了类型信息。
此外 http 还支持另外的 2 中编码方式(共4种)。
此外,如果你的业务涉及到加密或者更优秀的编码方式,也可以使用 raw 方式传递原始字符串数据,然后前后端约定编码/解码算法。
比如传递
以上。