HTTP 协议基础及发展历史

一、 5层网络模型介绍

 

HTTP 协议基础及发展历史

HTTP 协议基础及发展历史

 

低三层

物理层:主要作用是定义物理设备如何传输数据。

数据链路层:在通信的实体间建立数据链路连接。

网路层:为数据在结点之间传输创建逻辑链路。

传输层:

想用户提供可靠的端到端(End-to-End)服务。

传输层向高层屏蔽了下层数据通信的细节。

应用层:

为应用软件提供了很多服务

构建于TCP协议之上

屏蔽网络传输相关细节

二、HTTP协议的发展历史

HTTP/0.9  

只有一个命令 GET 

没有 HEADER 等描述数据的信息

服务器发送完毕, 就关闭 TCP 连接

HTTP/1.0

增加了很多命令

增加了 staatus code 和 header

多字符集支持、 多部分发送、权限、 缓存

HTTP/1.1

持久连接

pipeline

增加 host 和其他一些命令

HTTP2

所有数据以二进制传输

同一个连接里面发送多个请求不再需要按照顺序来

头信息压缩以及推送等提高效率的功能

服务端可以主动发送一些请求

三、HTTP 的三次握手

http 是请求和响应 所以要 通过 TCP来创建连接通道

一个 TCP 通道 可以通过多个 http请求

通过三次握手 来确认这个连接过程  规避因为网络原因从而产生的资源消耗 从而创建 TCP 连接

HTTP 协议基础及发展历史

三次握手:

第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

 

HTTP 协议基础及发展历史

 四、 URI、 URL、 URN

URI : 包含 URL 和 URN ,Uniform Resource Identifier 统一资源标志符,用来唯一标识互联网上的信息资源

URL:

Uniform Resource Locator 统一资源定位器,

格式:   http://user:[email protected]:80/path?query=string#hash

URN:永久统一资源定位器

 五、 HTTP报文格式

HTTP 协议基础及发展历史

HTTP 方法:

用来定义对于资源的操作。

常用GET、POST等

从定义上讲有各自的语义。

HTTP CODE:

定义服务器对请求的处理结果

各个区间的 CODE 有各自的语义。

好的 HTTP 服务可以通过 CODE 判断结果

六、 创建一个最简单的web服务

下载nodejs git

HTTP 协议基础及发展历史

 

 HTTP 协议基础及发展历史