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编码过程中前端开发与后台开发相关过程定位;


你可能感兴趣的:(Web)