Why so serious? ——The Dark Knight
一次完整的http请求过程
HTTP协议就是基于TCP/IP协议模型来传输信息的
装包与拆包:
http的4个基于
- 请求与响应:客户端发送请求,服务器端响应数据
- 无状态的:协议对于事务处理没有记忆能力,客户端第一次与服务器建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加页面等待时间,当客户端向服务器端发送请求,服务器端响应完毕后,两者断开连接,也不保存连接状态。下一次客户端向同样的服务器发送请求时,需要重新建立连接。
- 应用层:Http是属于应用层的协议,配合TCP/IP使用。
- TCP/IP:Http使用TCP作为它的支撑运输协议。
针对无状态的一些解决策略
- 有时需要对用户之前的HTTP通信状态进行保存,比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。于是引入了Cookie技术。
- HTTP/1.1想出了持久连接(HTTP keep-alive)方法。其特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接。
- 等等
http报文
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。
http请求报文
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。
HTTP/1.1 定义的请求方法有8种
http响应报文
TCP
- ACK:仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
- SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
- FIN:希望断开连接,设置为1
- seq:序列号,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生
- ack:确认号,期待收到对方下一个报文段的第一个数据字节的序号,因此当前报文段最后一个字节的编号+1即为确认号
三次握手
四次挥手
- 服务端在受到客户端的FIN后,不可能立刻断开链接,只能先回复一个收到了,然后等自己忙完,再告诉客户端已经可以断开链接了
本文作者:
Bano
本文链接: https://bano247.com/2021/11/02/http与tcp/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://bano247.com/2021/11/02/http与tcp/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!