对TCP/IP以及HTTP的知识实在太混乱,有些方面存在盲点,故整理了相关知识点。
TCP/IP协议模型:浏览器
对端传输:
缓存
注:SYN: 同步序列号;Seq:发送序号;ACK:确认字符安全
一握手 : 客户端向服务端发送请求报文段,SYN为1,Seq 为X,随后进入SYN_SEND服务器
二握手 : 服务的接收请求报文,发送ACK:x+1,SYN:1,Seq : Y。随后进入SYN_RECVpost
三握手 : 向服务器发送Seq+ACK报文,发送完毕后客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。编码
第三次握手在理论上是能够彻底省略的,在第二次握手服务器询问客户端是否准备好时就应该创建链接。那为何要存在第三次握手呢?3d
为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。产生缘由主要是由于客户端第一次握手请求在某种状况下延误到链接释放后才到达服务段,若是只使用两次握手这时链接已经创建,但这个链接永远不会使用,也不会释放,server的不少资源就白白浪费掉了。代理
第二次挥手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“赞成”你的关闭请求;cdn
第三次挥手: 主机2向主机1发送FIN报文段,请求关闭链接,同时主机2进入LAST_ACK状态;server
第四次挥手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,而后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段之后,就关闭链接;此时,主机1等待2MSL后依然没有收到回复,则证实Server端已正常关闭,那好,主机1也能够关闭链接了。
TCP协议是一种面向链接的、可靠的、基于字节流的运输层通讯协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经所有发送完毕了;可是,这个时候主机1仍是能够接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,可是主机2仍是能够发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,以后彼此就会愉快的中断此次TCP链接。
请求行(Request line)分为三个部分:请求方法、请求地址和协议版本
先引入反作用和幂等的概念。
反作用指对服务器上的资源作改变,搜索是无反作用的,注册是反作用的。
幂等指发送 M 和 N 次请求(二者不相同且都大于1),服务器上资源的状态一致。注册10个和11个账号是不幂等的,对文章进行更改10次和11次是幂等的。
在规范的应用场景上说,Get 多用于无反作用,幂等的场景,例如搜索关键字。Post 多用于反作用,不幂等的场景,例如注册。
在技术上说: