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

Posted 超越梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关使用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协议传输二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

java中UDP文件传输怎么实现?

通过 HTTP (MPEG-DASH) 进行流式传输有啥意义?

RPC框架GPRC浅析

为啥说 HTTP2 是二进制协议?

http协议简史

完整的url 解析