http协议原理
1.1 HTTP协议的发展历史
a. http/0.9
i.只有一个命令GET,
ii.没有HEADER等描述数据的信息,
iii.服务器发送完毕,就关闭TCP连接
(TCP连接跟Http请求是两个概念,一个TCP连接里面可以发送很多个HTTP请求。以前的协议版本不能这么做,但是现在1.1可以,2版本做了更大的优化)
b. http/1.0
i.增加了很多命令,比如POST,PUT等,
ii.增加了status code和header的内容,
iii.多字符集支持,多部分发送,权限,缓存等
c. http/1.1
i.持久连接。在1.0版本中,发送一次http请求就要建立一次TCP连接,服务端返回后便会关闭
ii.pipeline。可以在同一个连接里面发送多个请求(同时只能存在一个http请求)。但在服务端还是要按照顺序一个进行返回。假如两个请求,第一个处理得较慢,第二个请求已经处理完成了,但还是要等第一个请求返回完之后再返回第二个请求
iii.增加了一些头信息和其他一些命令,其中比较重要的就是host,它的出现可以让同一个物理服务器跑多个web服务
d. http2
i.所有数据以二进制传输(1.X里面是通过字符串)
ii.同一个连接里面发送多个请求不再需要按照顺序来
iii.头信息压缩以及推送等提高效率的功能
(这里的推送是指配合一个请求推送另外的请求,但在没有请求的情况下不能主动推送。和websocket的主动推送不同)
e.https 是指安全版本的http,跟http1.1的使用没有多大差别
1.2.HTTP的三次握手
http只有请求和接收的概念,而连接是指TCP连接。
三次握手:客户端发送一个我要【创建连接】的数据包,服务端收到请求后返回,客户端再次发送一次请求。这样经过三次握手 后,会创建一个TCP连接,这样做的目的,是为了防止服务端过多开启无用的TCP连接。
1.3.URI,URL和URN
URI是指 统一资源标志符 Uniform Resource Identifier,用来唯一标识互联网上的信息资源,包括了URL和URN
URL是指 统一资源定位器 Uniform Resource Locator, 用来找到这个资源所在的位置,并且去访问它得到它
URN 是指 永久统一资源定位器 Uniform Resource Name, 如果资源搬了一个位置,url不会告诉你搬了个位置,只会返回404
目的是为了在资源移动后还能被找到,目前还没有非常成熟的方案
1.4 HTTP报文格式
请求首行:包含methods,路由,协议的实现
响应首行:协议的实现,code,ok明文含义
header部分等后期详细补充
(格式:首行的参数通过空格来分隔,换行则说明 下面的是header部分,header空一行再换行,就是到了body主体部分)