http协议简史

https://blog.csdn.net/liujianfei526/article/details/53289350

 

0.9

协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。

 

1.0

首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。

除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。

1.0版规定,头信息必须是 ASCII 码(这也是为什么请求,特别是get请求url中有中文要encode的原因,get请求一般参数跟在url后面,在http中,而不是像post那样在body中),后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。

如text/html   、application/json;charset=UTF-8

这些数据类型总称为MIME type

除了预定义的类型,厂商也可以自定义类型,即私有http协议,body部分自定义编解码二进制流 - netty pb协议设计

客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。如Content-Encoding: gzip

客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。Accept-Encoding: gzip, deflate

有些浏览器在请求时,用了一个非标准的Connection字段。Connection: keep-alive,这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

 

1.1

1.1 版的最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive

客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。 Connection: close

一个TCP连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-length字段的作用,声明本次回应的数据长度。

Content-Length: 3495,上面代码告诉浏览器,本次回应的长度是3495个字节,后面的字节就属于下一个回应了。

 

 

HTTP协议规定,HTTP首部(headers)和HTTP主体之间是以一个空行分割的。因为HTTP每一行(每一行是指一个头部字段)是以\r\n结束的,一个空行的\r\n,再加上最后一行的结束符\r\n,一起是\r\n\r\n,也就是说,当检测到\r\n\r\n四个字符时,下一个字符开始就是HTTP body的内容了。

 https://segmentfault.com/q/1010000004446930/a-1020000004447035

 

 

ps:

url中的中文各大浏览器都是编码为utf8,然后+%搞定的,而对于get请求的参数,则各有不同,比较混乱:

所以建议的方法是:使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

而ajax对字符编码的函数其实也很混乱,所以我个人的建议是,参数放body里,由ContentType负责body部分的参数编码

https://www.cnblogs.com/hannover/p/4657463.html)

 

 

 

-=================-

https://blog.csdn.net/L_X_Y_HH/article/details/82013508

 

这里写图片描述

这里写图片描述

posted on 2018-09-26 18:23  silyvin  阅读(243)  评论(0编辑  收藏  举报