http传输字符编码与转义(深度好文)
一、引言
最近陆陆续续看了好多关于字节、字符、字符编码、字符转义的文章,终于对这个过程有了比较清晰深刻的认识。和后台开发相结合知道了乱码出现的理论具体原因,和前台开发结合知道了get与post请求的过程。这里分析下供大家学习分享。(字符转义指字符与字符之间转换,url编码;字符编码指字符与二进制的对应,ascii)
二、字符编码的发展
首先要明白字符集与字符编码的概念,字符集就是能表示的字符的集合(中文、英文、蒙古文),字符编码是字符与二进制的对应关系(如“我”存为001,”你“存为002)。不过一般字符集与字符编码容易统称,一般一对一,但也有一对多(如utf-8,utf-16)。
发展:英文字符集:ascii编码————不同国家文字字符集:ANSI编码(GBK、JIS等)————全世界统一字符集:UNICODE编码(UTF—8,UTF—16等),如下图(稍微展示的多了些):
二、http请求过程
整体流程图如下图所示:
1、字符转义:浏览器对汉字的通过某种编码方式进行url编码转义,转译成为ascii以便下一步。这里就是get post请求涉及到的地方,get肯定url编码转义,post中的urlencode与之类似,formdata猜测应该未转义,json猜测应该url编码;
2、字符编码:浏览器将上一步骤转义的字符按照ascii编码为字节;
3、字符解码:服务器将传输过来的字节按照ascii解码为字符,此步骤web server内部已经帮我们实现;
4、字符反转义:服务器将字符按照utf-8或某种编码方式进行url编码反转义为汉字,此过程中开发常用到request可以自定义字符转义解码方式;
5、字符转义:服务器将响应头字符按照某种编码方式url编码转义,此过程中开发常用response定义url编码,框架中一般默认会自动选择utf-8进行url编码,请求体见步骤6;
6、字符编码:服务器对url编码转义后的响应头,与响应体进行二进制编码,webserver内部实现;
7、字符解码:浏览器对响应头与响应体按照ascii解码为字符;
8、字符反转义:浏览器响应头进行url编码反转义,对响应体查看content-type来进行html解析或者图片解析;
三、总结
- 开发中遇到编码的乱码问题;
- 字符集与字符编码发展;
- http中的编码、解码,编码转义、编码反转义详细过程说明;
- http编码过程中前端开发与后台开发相关过程定位;
http传输字符编码与转义(深度好文)相关推荐
- 字符、字符集和字符编码详解(一文扫清疑惑)
前言 字符.字符集和字符编码时常看见,之前也看过一些博文,看得迷迷糊糊地,看过即忘,今天有幸碰到一篇能让我醍醐灌顶的文章,整理一下相关知识点与大家分享! 原博文地址:字符集编码详解(学习,看一篇就够了 ...
- Java字符编码详解
char "字节"是byte,"位"是bit : 1 byte = 8 bit : char 在Java中是2个字节.java采用unicode(<jav ...
- 常见的字符编码ascii、gb2312、utf-8和base64的规则
目录 常见的字符编码 ANSI ASCII 扩展 ASCII 码 GB2312 计算机中汉字的处理 区位码 GB2312双字节编码规则 三码转换 扩展阅读:为什么有机内码,避免与西文冲突 GBK 承上 ...
- 浏览器跳出HTML编码,浏览器如何解析HTML字符编码
浏览器如何解析HTML字符编码 概述 为HTML文档尽早指定字符编码,可以让浏览器立刻开始执行脚本. 细节 HTML文档是作为带有字符编码信息的字节流序列在互联网中传送的.字符编码信息可以在随文档发送 ...
- 浏览器如何解析HTML字符编码
浏览器如何解析HTML字符编码 概述 为HTML文档尽早指定字符编码,可以让浏览器立刻开始执行脚本. 细节 HTML文档是作为带有字符编码信息的字节流序列在互联网中传送的.字符编码信息可以在随文档发送 ...
- 关于Unicode,字符集,字符编码
基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支 ...
- System.Text.Json 中的字符编码
System.Text.Json 中的字符编码 Intro 默认的 System.Text.Json 序列化的时候会把所有的非 ASCII 的字符进行转义,这就会导致很多时候我们的一些非 ASCII ...
- python对浮点类型的数据进行格式化_(自用)Python Log2 数据类型、字符编码、格式化...
数据类型 1.整数 十六进制可以使用0x+数字0-9(字母a-f). 2.浮点数 一般使用科学计数法,用e代替10,比如1.2e5,为1.2×10^5. 3.字符串 可以使用单引号' ',或者双引号& ...
- python 字符编码、格式化
数据类型-布尔值 一个布尔值只有True.False两种值,要么是True,要么是False 布尔值可以用and.or和not运算 空值是Python里一个特殊的值,用None表示 Python对 ...
最新文章
- Microsoft宣称Visual Studio Installer将退役
- (三)硕博生常用的英文文献下载的网站
- iOS:多个单元格的删除(方法二):
- C指针原理(28)-垃圾回收-内存泄露
- 2012服务器系统关闭网络共享,提供网络服务的前提,Windows Server 2012如何更改高级共享设置...
- iview 输入框_使用iview框架,如何进行输入框或者按钮的关联验证
- P1614 爱与愁的心痛(python3实现)
- 电大计算机基础知识机考题,电大《计算机应用基础》网考机考单选题大汇总
- 计算器 - 栈的应用
- 操作系统 第一章 计算机系统概述
- vb 修改sql数据库服务器,vb连接服务器sql数据库
- UWA学堂|开发流程模块
- 今天分享一下做支付宝小程序遇到的坑。ISV权限不足,建议在开发者中心检查对应功能是否已经添加。验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配
- MRP里如何预测lead time :Approaches for the Prediction of Lead Times in an Engineer to Order Environment
- tumblr_向您的Tumblr博客添加高级主题
- 图纸上标注的是实际尺寸吗_尺寸数字应该标注图纸上所画实际长度。
- 一元多项式因式分解的唯一性定理
- 关于BN层的一点理解
- Postgresql从MD5密码验证改为SCRAM-SHA-256
- Hamming Codes
热门文章
- 分支限界法时间复杂度_数据结构时间复杂度的摊还分析(均摊法)之一:基础...
- 无人车运动参数校准流程
- java 微服务源码_Redkale 1.9.4 Java 分布式微服务框架
- 洛谷——P1830 轰炸III
- z-index 绝对定位的盒子居中
- node.js 报错Error: ENFILE: file table overflow...ENFILE: file table overflow, open...
- 编写通用计算机代码,计算机源代码编写规范(VB版本).doc
- matlab 贝叶斯信息标准_Matlab中贝叶斯(bayes)分类器实现分类
- topcoder srm 686 div1 -3
- JavaScript中Write和Writeln的区别