HTTP协议中的编码问题

原创 2015年11月22日 16:07:00

HTTP协议中的编码问题

   基于HTTP协议的web网站的建设中,时常会遇到显示乱码的情况。引起乱码现象的原因归根到底就是编码与解码过程的不对称,那么我们就来了解一下HTTP协议的编码规则。

一,URL与UrlEncode
  网络上的资源都可以通过统一资源定位符(URL)访问到,URL是统一资源标识符(URI)的最常见形式,可以精确说明资源的位置以及如何访问资源。URL需要满足一个特性就是它必须是可以移植的,即世界上每一台计算机上的每个浏览器都可以访问到一个发布出去的URL,并且能够成功的定位到相同的资源上。这就需要URL有一套自己的编码机制来传递各个字符集中的字符,并且传输的过程中不能有信息的丢失,最好还要具有可读性。于是,URL编码选定了ASCII编码字符集作为它的字符集,将字节信息转换成百分号“%”加两位16进制的数字表示,这就是UrlEncodeASCII字符集中的字符是世界上最通用的字符,所有的计算机都要支持。经过百分号编码后的URL中的字符都是可见的ASCII字符,在网络上传输或者人工阅读都非常方便。

  但是,UrlEncode是一套独立完整的字符编码方案吗,它可以把任意字符集中的字符直接编码成ASCII形式的字节信息吗?当然不是的,首先UrlEncode的编码对象不是字符本身,而是字符经过其他编码方案转换后的字节信息。所以在进行UrlEncode的时候是需要选择一种编码方案的,我们可以在浏览器中输入中文来查询并不是因为不用选择编码方案,而是采用了系统或浏览器默认的编码。

  一个URL编码过程是这样的,如我要在谷歌中搜索“URL编码”,它的URL大概是这个样子:
https://www.google.com.hk/webhp?q=URL编码。那么,首先需要对特殊字符“编码”做编码转换成字节,“编码”两个字通过UTF-8编码后的字节用16进制表示就是E7BC96E7A081。然后按照刚才说的UrlEncode方法在每个字节前面添加一个百分号,形成最终的地址:https://www.google.com.hk/webhp?q=URL%E7%BC%96%E7%A0%81。

二,UrlEncode的适用范围
   HTTP的报文中可以包含访问的路径、查询参数、Header以及"application/x-www-form-urlencoded" POST类型的数据,这几部分都可能会包含一些特殊字符,那么这几部分也就都需要进行编码,并且都必须使用UrlEncode编码。

三,UrlEncode编码方案的标准
  刚刚说到,字符数据先要根据某种字符编码转换为字节流,然后再表示为可见的URL。如果各个浏览器厂家使用不同的编码方案,并且不加任何提示信息。那么对于服务端来说将是一个灾难,因为他们根本就不知道选择哪种解码方案,如何将字节流还原回原来的字符信息。好在已经有标准规定了UrlEncode中所使用的编码。

  2005年1月发布的RFC 3986,强制所有新的URI必须对未保留字符不加以百分号编码;其它字符要先转换为UTF-8字节序列, 然后对其字节值使用百分号编码。
 
四,普通POST数据的编码
   "application/x-www-form-urlencoded" POST类型的是使用UTF-8和百分号编码,那么POST其他数据是怎样的呢?HTTP协议规定通过"Content-Type"首部来指定发送的数据所使用的编码,如"text/html;charset=UTF-8",这样服务器就知道用UTF-8编码来解码POST的数据了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

再谈Http协议中消息的编码

HTTP协议报文编码彻底详解。

HTTP协议及浏览器编码行为

6.1 HTTP协议及浏览器编码行为 HTTP协议和浏览器是Web国际化的基础,在进入Java服务器端之前,必须先对它们的编码行为有所了解。 6.1.1 HTTP协议 HTTP协议是B/S体系结...

Http协议中消息的编码

转自:http://www.51testing.com/?uid-390472-action-viewspace-itemid-233986 以前大概知道URLencoded, applicatio...

android http UrlEncode 中文乱码等问题

BufferedReader in = null;                  try {       &#...
  • ldpxxx
  • ldpxxx
  • 2014-04-11 16:20
  • 5842

HTTP Request 中加入特定的 Header

6.1 最简单的爬虫 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。python的urllib\urllib2等模块很容易实现这一功能,下面的例子实现的是对...

http协议中content-length 以及chunked编码分析

0.序 1.http/1.1协议中与chunked编码的相关字段 1)Entity Body 2)Content-length 3)Message Length 4)content-le...

Http协议与请求, Post请求与Get请求的区别,Base64和URL编码,md5,sha-1加密,对称和非对称加密,支付宝微信第三方支付

Http协议与请求 Post请求 Post请求与Get请求的区别 Get请求的参数是直接放在url后面的,而Post请求是放在请求体中的 Get请求参数的长度...

Http协议中的编码和解码-2

一、字符集与文字编码简介    1. 计算机如何显示文字   我们知道,计算机是以二进制的“形式”来保存和处理数据的,也 就是说,不管我们使用键盘进行输入,还是让计算机去读取一个文本文件,计算机得到的...

说说http协议中的编码和解码

http://www.csdn123.com/html/itweb/20130730/29422_29378_29408.htm **********************************...

http协议中content-length 以及chunked编码分析

转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922  0.序 1.http/1.1协议中与chunked...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)