什么是HTTP协议?
http协议是一种基于C/S架构模型模型的无状态传输协议,是一种超文本传输协议。主要解决如何包装数据问题。通过URI(资源唯一标识符)来传输数据和建立连接。
什么是无状态?
无状态是LPL的一名选手,很早就退役了。 无状态指的是每个请求与响应之间是相互独立的,服务器不会保存关于客户端连接的任何信息。为了实现状态管理,例如用户登录状态的保持,通常需要借助一些额外的机制,比如Cookie或者Session来实现。
什么是超文本?
超文本文档(Hypertext Document)是一种由超链接组成的文档,其中可以包含文本、图像、音频、视频等多媒体元素。它是Web上最常见的内容形式,是构成网页的基本单位,就是HTML。
HTTP的内容
HTTP报文有请求报文和响应报文两种,HTTP的这两种报文都由三部分组成:开始行、首部行、实体主体。(CRLF: 空格)
● 开始行可用于区分是请求报文还是响应报文
● 首部行都是由首部字段名 和 值组成,每个首部行在结束地方都有 CRLF
● 首部行和实体主体间有 CRLF
请求报文
请求报文组成: 请求行(请求方式、协议版本) + 请求首部(请求URI、客户端信息等) + 请求主体(资源信息、用户信息)
响应报文组成: 响应行(响应状态、协议版本) + 响应首部(资源标识符URI、服务器信息等) + 响应主体(返回的资源信息)
常见的请求体
每个请求报文的请求行中都有请求体Content-Type,来阐述以什么格式传输请求主体。
application/json:以Json格式传输请求内容multitip/form-data:在url接上key=value&key2=value2...的格式传输请求内容,列如表单的提交application/x-www-form-urlencoded:生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果传输的是文件,还要包含文件名和文件类型信息。最后以------boundary为结束标识。(-----boundary 中的boundary是由系统生成的唯一标识符)
常见的Http方法
GET:GET请求用于从服务器获取特定资源。当客户端发起GET请求时,它希望服务器返回指定资源的表示。这个请求可能包含数据,但是在传输过程中,这些数据会作为查询字符串附加在URL的末尾。POST:POST请求用于向服务器提交数据,通常用于创建新资源或对现有资源进行修改。与GET请求不同,POST请求将数据放在请求的正文中,而不是作为查询字符串附加在URL上。OPTIONS:HTTP中的OPTIONS请求方法是用于获取目标资源所支持的一些请求方法,或者查询服务器支持哪些请求方法。或者告诉游览器这个请求是否支持跨域。PUT:PUT请求用于向服务器更新或替换指定资源。当使用PUT请求时,客户端会将完整的新数据发送给服务器,以取代服务器上已有的资源。TRACE:TRACE是HTTP协议中的一种请求方法,它用于对服务器进行回显测试,即在请求-响应链路上追踪和检查中间环节对请求的处理情况。(当客户端发送TRACE请求时,服务器会原样返回该请求的内容,在响应的主体中包含了服务器接收到的原始请求信息。这包括请求行、请求头和请求正文(如果有的话)。TRACE请求允许客户端查看在请求经过代理、网关或其他中间节点时,中间节点对请求所做的更改。)TRACE请求通常在生产环境中被禁用或限制使用。DELETE:DELETE是HTTP协议中的一种请求方法,用于请求服务器删除指定的资源。PATCH:和PUT相似,不过修改的是局部资源HEAD:和GET相似,只不过返回的只有头部。CONNECT:CONNECT是HTTP协议中的一种请求方法,它用于在客户端与服务器之间建立隧道通信。列如创建TCP链接,进行加密通信。
为什么需要三次握手?
- 确认双方的接收和发送能力:通过三次握手,客户端和服务器可以互相确认彼此的接收和发送能力是否正常。客户端发送的SYN报文以及服务器回复的SYN+ACK报文都能够验证对方的连接请求和连接响应能力。
- 同步双方的初始序列号:每个TCP连接都有一个初始序列号,用于按序传输和确认数据包。在握手过程中,客户端和服务器分别发送初始序列号给对方,用于后续数据的正确传输和确认。
- 避免已失效的连接请求产生连接:如果之前客户端发送的连接请求在网络中滞留,而服务器没有收到,服务器会误认为这是一个新的连接请求。通过三次握手,可以避免已失效的连接请求产生连接,只有在服务器确认收到客户端的连接请求后才会建立连接。
- 防止重复连接:服务器回复确认连接的报文在网络中延迟,客户端可能会再次发送连接请求。通过三次握手,可以确保客户端和服务器都能确认连接的建立,避免重复连接的产生。
为什么需要四次挥手?
- 可靠关闭连接:四次挥手可以确保双方都能够关闭连接,并且在关闭过程中进行适当的等待和确认,避免数据的丢失或不完整。
- 数据的完整传输:通过四次挥手,双方可以继续传输剩余的数据,确保数据的完整性,而不会在关闭连接时丢失未传输的数据。
- 释放网络资源:四次挥手过程中,连接的双方逐步关闭连接,释放已占用的网络资源,从而提高网络的可用性和效率