http传输格式是文本还是二进制?

最近突然对这个问题产生了困惑,我知道http是超文本传输协议,它传输过程和传输结果都是文本文件么?但它又可以传输二进制文件(如上传下载图片),所以http传输的格式到底是什么?
用搜索引擎和看书都没有发现确切的答案,望解答

阅读 25k
4 个回答

http是基于tcp的一种上层实现

1:
底层一定是二进制的,
网线和光缆都只能传输脉冲二进制啊

2:按照官方资料,http传输的是超级文本(所有WWW文件/网络资源在这里应该都是属于超级文本了),而这些文件本身就是二进制,一个img图片、一个Js文件、一个mp3文件都是二进制形式存在的啊,只不过通过编辑器看到的“文本”是把这个二进制解释成高级“文本”来展现罢了,就算用记事本打开一张图片,依然可以看到一堆文本啊,这不过图片的二进制和记事本(编辑器)的解释器不匹配,所以看起来是乱码;但是这些都是抽象出来的,并不是说我们在浏览器看到的res就是http收到的数据,只能说这是经过浏览器处理解析后的可视化数据,本质上通过http传输的,或者说通过tcp,或者说通过光缆/无线电波传输的信息都是二进制的形式,具体在哪一层如何界定,这个真不容易量化和界定。

所以:此文本非彼“文本”,超文本是啥,就是二进制文件在http协议中的存在形式,或者叫编码更合适。

前面的回答好像都没有理解楼主的意思,
曾经和楼主有同样的疑问,就是感觉二进制无论传输效率还是解析执行效率都要远高于文本协议,为什么http这类网页协议没有使用二进制还是文本协议呢?
html主要是脚本语言,所以适合用文本协议,而不是二进制协议,二进制协议可读性差,调试困难;

当然二进制的优点也很明显,就是效率高,作为协议,开销要比文本小得多,但是脚本作为解释型语言的优点就是修改方便啊,至于执行性能就交给浏览器了,虽然不如二进制,但是开发效率高啊;

传输效率方面,文本也要低很多,不过一般大家都能接受,而且网速在不断提高 ,这东西一旦形成标准了,也就没法再更改了;

标准不定一是效率最高的,比如键盘的字母布局,当前使用的字母布局打字效率其实不是最优,有人曾经统计过和种字母在单词中出现的频率,再给26个字母重新布局分配位置,打字效率可以提高30%,但是因为大家用当前的键盘习惯了,也就不再愿意重新熟悉一个新的键盘布局了,所以当前的键盘还是延用了老的键盘设计作为标准;

新手上路,请多包涵

你可以查一下MIME。
就我自己理解,http/0.9是不支持非文本的,1.0之后才支持的,因为其增加了MIME。http/1.0之后版本在传输非文本文件的时候,比如图片,其实是使用MIME转换成ASCII传输的

所以说,我认为是是文本

新手上路,请多包涵

HTTP传输的是字符串,到了TCP层以二进制传输。
对于使用HTTP协议传输图片、文件,则有一个将二进制通过Base64等编码方式转换为字符串的过程。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进