http协议中传输的数据是啥格式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http协议中传输的数据是啥格式?相关的知识,希望对你有一定的参考价值。

我请求一个网页
然后将数据读到txt文件中 为何是乱码呢

参考技术A 这个要看源代码是什么格式,如果是UTF-8格式,则里面的汉字是乱码,需要转化为GBK格式就行啦,因为在编译器里面,UTF-8格式是不可见的乱码 参考技术B 有TCP/IP协议之类的

用抓包软件抓一下就知道了

抓包软件都是用16进制表示的,不单是文本。

有关使用HTTP协议传输二进制文件

HTTP协议是基于字符(ASCII)的,当Content-Type项为text/xml,则内容是文本格式;当二进制格式时,Content-Type项为image/gif,就是了。例如,浏览器请求一张图片的数据包信息:

1、请求消息:

技术分享

2、响应消息:

技术分享

下面是二进制的数据区

技术分享

由上可知,http协议中content中可以是纯二进制的。

 

通常上的理解,http协议中请求、相应都是以ascii字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3、smtp邮件协议都是针对文本的,而FTP支持传输二进制数据,即不需要经过编码转换成字符型数据)

如果直接使用http传输二进制(不经过base64编码),可能会造成一下问题:

 

1) 不知道传输字节的具体长度,如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字1234567,本来只有4个字节,但是转化成文本的“1234567”是有7个字节。在int类型的时候固然好办,但是一个数组的时候,经过转化以后,在转化回来就很麻烦了。

2) 对于一些数字,二进制传输Server是没法处理的。如int 1,二进制数据是0x00000001,按字节传输的时候,client能够正常发送,但是libevent收到以后,在抛给libevent_http层是,会把数据截断,前两位0x00是字符串的停止符。

以上是关于http协议中传输的数据是啥格式?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP中Body传输的数据类型与格式

请问socket通信与http通信的区别是啥??

“http_200”、“http_302”分别是啥意思?

http 底层协议是啥?

java的TCP和HTTP的区别和联系是啥?

HTTP协议是啥意思