概述

HTTP 协议一般指 HTTP(超文本传输协议)。

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。

HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。

HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。

参考:

菜鸟教程:HTTP教程

程序员栈:说一下什么是http协议无状态以及怎么解决?

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

简单点理解:

其中有状态协议就比如SMTP协议,自个人的理解就好比两个人之间的对唱,我唱第一句的时候你得唱第二句,但HTTP协议算是一个人点歌一个人唱,每次单点不会影响到第二次点歌。

无状态协议缺点

无状态协议的主要缺点在于:单个请求需要的所有信息都必须要包含在请求中一次发送到服务端,这导致单个消息的结构需要比较复杂,必须能够支持大量元数据,因此 HTTP 消息的解析要比其他许多协议都要复杂得多。同时,这也导致了相同的数据在多个请求上往往需要反复传输,例如同一个连接上的每个请求都需要传输 HostAuthenticationCookiesServer 等往往是完全重复的元数据,在一定程度上降低了协议的效率

一句话来说:请求头太大,还要反复传输。

实验

再一次偶然的使用手机搭建服务器的过程中发现,服务端软件被请求时候打印出的结果是好多请求数据来自不同的端口,而且这些端口是不断动态变化的,猜测是因为HTTP协议的无状态导致TCP协议不停的断开和连接,所以导致客户端的源端口不停的变化,但问了ChatGPT之后才发现不完全是这个原因。

TCP

TCP连接的建立过程中,客户端会选择一个空闲的本地端口作为源端口,并将其包含在连接请求中发送给服务器。服务器收到连接请求后,会分配一个本地端口作为目标端口,并将其发送回客户端以建立连接。这样,源端口和目标端口在连接建立后就确定下来,并且在连接的生命周期内保持不变

需要注意的是,在客户端与服务器之间的每个TCP连接中,源端口和目标端口都是独立的。这意味着,当多个连接同时存在时,每个连接都可以使用不同的端口号,而不会产生冲突。

因此,虽然TCP端口在连接建立前是动态分配的,但在连接建立后,源端口和目标端口通常保持不变。这有助于确保数据能够正确地传递到正确的连接和应用程序中。

动态变化的原因

:您说的:HTTP协议的无状态性与客户端端口的动态变化之间没有直接的因果关系。客户端端口的动态变化是操作系统的行为,而HTTP的无状态性是协议设计的特点。这句话难道说HTTP协议的无状态到底会不会导致TCP端口的动态变化,没有关系吗

ChatGPT:我向您道歉,之前的回答可能不够清晰。我会尝试更清楚地解释。

HTTP协议的无状态性与TCP端口的动态变化之间没有直接因果关系。这两个概念在网络通信中是独立的。

HTTP协议的无状态性是指每个HTTP请求与响应之间是相互独立的,服务器不会保留任何关于客户端的状态信息。每个请求都是独立的事务,服务器只根据请求中的信息进行处理,而不依赖之前的请求或客户端的状态。

而TCP端口的动态变化是操作系统的行为,用于避免端口冲突和管理网络连接。操作系统会动态分配空闲的本地端口给客户端使用,确保每个连接具有唯一的源端口。

虽然在建立HTTP连接时客户端会使用动态分配的源端口,但这是因为操作系统的行为,而不是HTTP协议本身的特性。无状态性和端口动态分配是两个独立的概念,它们之间没有直接的因果关系。

因此,HTTP协议的无状态性并不直接导致TCP端口的动态变化。无状态性是HTTP协议的设计特点,而端口的动态分配是操作系统在处理网络连接时的行为

HTTP消息结构

请求&响应

某次实验在axiso的请求响应拦截器上分别定义了打印请求数据和打印响应数据,结果如下:

image-20230614223504502

以上数据是一个登陆接口请求和响应

GET请求

image-20230614222252420

以上分别请求网页配置状态接口 和 网页右侧树状导航栏接口

GET响应

image-20230614223959815

以上分别响应网页配置状态接口 和 网页右侧树状导航栏接口

下载

GET方法是HTTP协议中最常见的方法之一,一般情况下,使用POST方法进行文件下载并不常见