HTTP header 头的编码格式

单指Response(感觉request也差不多)

或者说是HTTP报文的编码格式(TCP的知识了解的不多,越想越乱)

HTTP header里面有关于HTML文档编码的说明,但是对于整个HTTP报文,在打开之前是不知道编码的,感觉是一个先有鸡还是先有蛋的问题。

如果说是按一般的文本文档,那么当使用HTTP来下载一个exe等二进制文件的时候不会产生问题么。

说的有点乱了,我也不知道该如何正确的表述,希望大家尽量理解

阅读 14.7k
1 个回答

处理HTTP协议的程序只关心 HTTP头是什么,不关心后面的数据是什么,所以他只要能够正确解析HTTP头里面的东西就可以了。其后面的数据是什么不是HTTP协议关心东西,所以处理HTTP协议的程序根本不会解析HTTP报文的其他部分,HTTP协议只会解析数据到两个连续的换行回车之前。后面的数据,像是HTML,exe等都不是HTTP协议负责解析的。

HTTP头其实就是ACSII码,准确的来说HTTP头里面不会出现标准ACSII之外的字符。URL里的中文一般都是用UTF-8编码,然后写成%XX的形式。所以HTTP里面不会出现标准ACSII之外的字符,所以HTTP头用ACSII编码就够了。这样就可以正确解析 HTTP头了。

然后就是使用HTTP传输数据的问题。其实数据的所有表现形式就都是二进制,在HTTP协议里面,传输需要的就是HTTP头,其后面携带的是什么数据都没有关系,对HTTP协议来说都是一样的。HTTP协议其后的数据是什么意思全看你上层怎么解释。HTTP协议传输数据就是 “HTTP头” ++ “数据”, HTTP协议只关心这个 HTTP头,数据格式那是上层应用关心的事情,是你自己的上层协议规定的格式,只要HTTP能够传输任意的二进制数据就可以了。HTTP头里面的content-type只是用于告诉处理HTTP协议的程序把这个数据交给上一层的哪个应用处理。比如在浏览器里,text/html 就交给处理HTML的程序处理,image/jpeg 就交给jpg的解码器,如果是application/octet-stream就交给下载程序处理等等。交给上层的数据,就是原始的HTTP报文里面两个连续的换行回车之后的数据,原封不动的数据。上层的处理程序能不能正确的识别“编码”,就不是HTTP所关心的了。

如果你把他们看作一个整体来看,显然是不行的。比如HTTP下一层是TCP?IP协议,难道TCP知道传输的网页使用UTF-8编码?不,他不知道,因为他不需要知道,他只需要把它携带的数据交给处理HTTP协议的程序就好了(TCP协议头里面也有一个标识上层协议的字段),所以你现在看到的数据不包含一些端口号 IP地址之类的东西。

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