HTTP协议
OSI七层模型
应用层 HTTP协议
表示层
会话层
传输层 TCP UDP
网络层 IP
数据链路层
物理层
HTTP简介
HTTP 即超文本传输协议,基于TCP/IP协议 用于应用层.
用于web浏览器和web服务器的双工通信
1989年发起的 最广泛使用的版本是1.1
HTTP是一个C/S请求和应答的标准,默认端口是80
HTTP工作原理
- 在浏览器地址栏中输入url,按下回车之后会经历以下流程:
- 浏览器向DNS服务器请求解析url中域名对应的ip地址和端口。
- 解析出ip地址后,根据该ip地址和默认端口,跟服务器建立TCP连接. (三次握手)
- 建立好tcp链接后,浏览器向服务器发出读取文件的HTTP请求,并发送给服务器。
(这个请求作为TCP三次握手的第三个报文的数据发送给服务器.) - 服务器对浏览器的请求做出响应,并发对应的html文本发送给浏览器.
- 释放TCP连接 (四次挥手)
- 浏览器将http文本展示给用户.
三次握手
三次握手其实就是指建立一个TCP连接时,需要客户端和服务器总共发3个包.
三次握手的作用
就是为了确认双方的接收能力和发送能力是否正常.
- 为什么要进行三次握手
为了防止服务端开启了一些无用的连接增加服务器开销,以及防止已经失效的连接请求突然又传送到服务端而发生错误.
三次握手具体介绍
没有发生握手时客户端和服务端都是close状态.
握手之前客户端发起请求连接主动结束CLOSED阶段,服务器端也被动结束CLOSED阶段,并进入LISTEN阶段.
-
第一次握手
客户端向服务端发送请求建立连接的报文. -
服务端接收到客户端的请求报文之后,确认客户端的序号位有效,并返回给客户端: 我能正常接收你发送的数据,并同意创建新的连接.
-
客户端接收到服务端的确认收到数据报文之后,表示收到服务端同意连接的信号,进入数据传输阶段.
举个例子:
(1) 男孩喜欢女孩, 于是给女孩写了一封信,告诉女孩我爱你,我们交往吧, 写完信之后男孩焦急的等待,因为男孩不知道信件是否能顺利到达女孩手中.
(2) 女孩收到男孩的情书后,心花怒放,原来我们是两情相悦,于是给男孩回了一封信: 你的情书我收到了,也明白了你的心意,其实我也喜欢你,愿意和你在一起.
女孩写完信之后也很焦急的等待,因为她同样不知道回信是否能顺利传达给男孩.
(3) 男孩收到女孩的回信之后很开心,因为自己写给女孩的信她收到了,并从女孩的回信中知道了女孩也喜欢自己愿意和自己交往. 然后男孩又写了一封信告诉女孩,你的心意和信我收到了,谢谢你,我爱你.然后他们幸福的在一起了.
四次挥手
所谓四次挥手即TCP连接的释放. 连接的释放必须是一方主动释放,另一方被动释放.
挥手之前主动释放连接的客户端结束established阶段,随后开始进入四次挥手阶段:
- 客户端给服务端发送释放连接的请求.
- 服务端接收客服端发送的释放连接请求,确认了客户端想要释放连接,并返回给客户端同意释放连接
- 服务端发送给客户端同意释放连接的报文之后进入准备释放连接阶段,等待数据传输完成之后 服务端再次向服务端发送已经准备好释放连接的报文.
- 客户端收到服务端发送的准备好释放连接报文之后进入time wait阶段 并向服务器发送接收到 服务端准备释放连接的报文.
最后断开连接.
- 为什么要客户端等待2MSL?
客户端要确认服务端是否收到自己发出的ACK报文.
当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文。所以客户端在发送完ACK确认报文之后,会设置一个时长为2MSL的计时器。MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。
HTTP请求/响应的步骤:
- 客户端连接到web服务器
- 发送HTTP请求
- 服务端接收请求并返回HTTP响应
- 释放TCP连接 (四次挥手)
HTTP请求方法
http/1.1协议中共定义了8中方法来以不同的方式操作指定的资源.
- get
获取数据 - post
发送数据 - put
- head
- delete
- trace
- options
- connect
HTTP的状态码
- 1xx : 请求被服务器接收,继续处理
- 2xx: 成功
- 3xx: 重定向------需要后续操作才能完成这一请求.
- 4xx: 请求错误------请求包含语法错误或者无法被执行
- 5xx: 服务器错误-----服务器处理某个正确请求时发生错误
部分内容参考:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
网友评论