我已知晓的是http状态码是在服务器发送完数据后向用户端发送的,
一次http请求,会先经过三次握手(TCP),之后客户端发送HTTP请求,服务器响应请求(TCP),发送TCP分片,数据发送完时,会发送一个200的状态码。
但是我今天用wireShark抓包时发现:
状态码(如200)并不一定是在HTTP报文里发送,也有可能是在TCP报文中发送,而之后还会有一个不带状态码的HTTP报文,
我想问的问题时:为什么状态码有可能在TCP报文中,又有可能在HTTP报文中,并且在报文中的顺序也不是固定的?
截图如下:
一般来说,HTTP 协议是基于 TCP/IP 传输层协议之上的应用层协议,它只能在 TCP 连接建立后才能进行。
你在 wireshark 里看到既有 TCP, 也有 HTTP,这是 wireshark 的特性,它可以同时显示多个不同层级的协议。
可以通过设置显示过滤器来查看单个协议,例如 http 只显示 HTTP 协议,同理 tcp 之显示 TCP 协议。