1、HTTP介绍
         HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信,通常使用端口 80/8080。HTTP可以传输多种数据类型,如html文件、图片、视频等数据。传输的数据类型是多种类型的,如:text/html; charset=UTF-8, application/json等。
(HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。)
2、HTTP消息结构
HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。HTTP消息分为两种类型:请求消息和响应消息。
一个 HTTP 客户端是一个应用程序(Web 浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。
客户端请求的报文格式如下

1.请求行
(1)请求方法:

上述的 GET, POST 和 HEAD 方法属于HTTP 1.0的版本,其他的方法数据HTTP1.1新增的方法。
(2) 请求 URI(统一资源标识符):请求的资源路径,通常包括主机名、端口号(如果非默认)、路径和查询字符串。
(3)HTTP 版本:如 HTTP/1.1 或 HTTP/2。
请求行的格式示例:
GET /index.html HTTP/1.12.请求头
包含了客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等。常见的请求头如下:

3.空行
请求头和请求体之间的分隔符,表示请求头的结束。
4.请求体(可选)
在某些类型的HTTP请求(如 POST 和 PUT)中,请求体包含要发送给服务器的数据。
服务端的响应消息格式

1.状态行
(1) HTTP 版本:与请求消息中的版本相匹配。
(2)状态码:三位数,表示请求的处理结果,如 200 表示成功,404 表示未找到资源。
常用的状态码如下:
| 1xx | 信息,服务器收到请求,需要请求者继续执行操作 | 
| 2xx | 成功,操作被成功接收并处理 | 
| 3xx | 重定向,需要进一步的操作以完成请求 | 
| 4xx | 客户端错误,请求包含语法错误或无法完成请求 | 
| 5xx | 服务器错误,服务器在处理请求的过程中发生了错误 | 
(3)状态信息:状态码的简短描述。
状态行的格式示例:
HTTP/1.1 200 OK2.响应头
包含了服务器环境信息、响应体的大小、服务器支持的压缩类型等。常见的响应头信息如下:
| Date | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT | 
| Server | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix) | 
| Content-Type | 响应体的媒体类型(MIME类型),如 text/html; charset=UTF-8,application/json等。 | 
| Content-Length | 响应体的大小,单位是字节。例如:3145 | 
| Content-Encoding | 响应体的压缩编码,如 gzip,deflate等。 | 
| Content-Language | 响应体的语言。例如:zh-CN | 
| Cache-Control | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。 | 
| Connection | 管理连接的选项,如 keep-alive或close,keep-alive 表示连接不会在传输后关闭。。 | 
| Set-Cookie | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure | 
| Expires | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT | 
HTTP1.0中默认使用的是短链接,HTTP1.1中默认使用的是长链接。短链接的Connection值设置为close;长链接的Connection值设置为keep-alive。短链接是指每次的HTTP请求都需要重新链接,长链接是指HTTP的请求可以复用上次请求已连接的socket套接字进行通信。
3.空行
响应头和响应体之间的分隔符,表示响应头的结束。
4.响应体(可选)
包含服务器返回的数据,如请求的网页内容、图片、JSON数据等。
消息响应举例如下:

3、HTTP和TCP的区别
HTTP(Hypertext Transfer Protocol)和TCP(Transmission Control Protocol)在网络协议栈中处于不同的层次,它们各自有不同的职责和特性。以下是HTTP和TCP之间的主要区别:
- 协议层次: - TCP是传输层协议,它负责在源端和目的端之间建立、管理和终止连接,确保数据的可靠传输。
- HTTP是应用层协议,它使用TCP作为传输层协议来发送和接收数据。HTTP定义了如何格式化请求和响应消息,以及如何在Web上实现超文本链接、缓存等功能。
 
- 职责和特性: - TCP: - 提供面向连接的、可靠的、基于字节流的服务。
- 使用序列号、确认和重传机制确保数据的顺序和完整。
- 支持全双工通信,允许在建立连接后,双方同时发送和接收数据。
- 提供了流量控制、拥塞控制等机制,以优化网络性能。
 
- HTTP: - 定义了客户端和服务器之间交换消息的格式和规则。
- 提供了请求/响应模型,客户端发送请求,服务器返回响应。
- 支持多种请求方法(如GET、POST、PUT、DELETE等)和状态码(如200 OK、404 Not Found等)。
- 支持持久连接(HTTP/1.1),允许在一个TCP连接上发送多个请求和响应,减少建立和关闭连接的开销。
 
 
- TCP: 
- 通信过程: - 当使用HTTP进行通信时,首先需要在客户端和服务器之间建立一个TCP连接(HTTP/1.0或更早版本中通常是每次请求建立一次连接,HTTP/1.1和更高版本支持持久连接)。
- 建立连接后,客户端发送HTTP请求消息给服务器,服务器收到请求后处理并返回HTTP响应消息给客户端。
- 通信完成后,TCP连接可以被关闭或保持打开状态以支持后续的请求。
 
- 安全性和加密: - TCP本身不提供加密或身份验证功能,它只负责数据的可靠传输。
- HTTP可以通过使用HTTPS(HTTP Secure)来提供加密和身份验证功能。HTTPS在HTTP的基础上增加了TLS/SSL协议,用于加密传输的数据,保护通信的机密性和完整性。
 
- 用途和场景: - TCP可以用于各种需要可靠传输的场景,如文件传输、邮件发送、数据库连接等。
- HTTP主要用于Web通信,是互联网上的主要协议之一,用于浏览网页、传输文件、执行Web服务等。
 
HTTP和TCP在网络协议栈中处于不同的层次,各自负责不同的任务。HTTP使用TCP作为传输层协议来确保数据的可靠传输,并在其上定义了如何格式化请求和响应消息以及如何在Web上实现各种功能。
上述文章部分内容参考于:
HTTP/HTTPS 简介 | 菜鸟教程 (runoob.com)
HTTP请求、响应报文格式_http 响应包的格式-CSDN博客