HTTP 1.0 和 2.0 有什么区别?



HTTP 2.0 和 3.0 有什么区别?









常见的 HTTP 状态码有哪些?

HTTP 请求包含哪些内容,请求头和请求体有哪些类型?
请求和响应报文

- 请求行 (Request Line): 包含请求方法 (GET、POST)、请求的资源路径(/test.html) 已经 HTTP 的版本 (HTTP/1.1)
- 请求头 (Request Headers): 包含各种键值对,传递客户端环境、请求内容和认证信息
- 空行 (Blank Line): 用于分隔请求头和请求体
- 请求体 (Request Body): 仅在 POST 、PUT 等方法中存在,包含需要发送到服务器的数据

- 状态行(Status Line): 包含 HTTP 的版本(如 HTTP/1.1)、状态码(如 200)和状态描述(如 OK)
- 响应头(Response Headers): 包含服务器返回的各种键值对,用于描述响应的元信息。
- 常见的响应头:
- Date:服务器时间戳,指示响应生成的时间。
- Server:服务器的应用程序信息(如 Apache/1.3.29)
- Last-Modified:资源的最后修改时间。
- ETag:资源的唯一标识,用于缓存验证。
- Content-Type:响应内容的 MIME 类型(如 text/html)
- Content-Length:响应内容的字节长度
- Connection:指示连接是否保持打开(如 close 或 keep-alive)
- Accept-Ranges:指示服务器支持的部分内容请求(如 bytes)
- 空行 (Blank Line): 用于分隔请求头和请求体
- 响应体 (Response Body): 包含服务器返回的实际内容(如 HTML 文档、图片、JSON 数据等)
HTTP 方法
| 方法 | 作用 | 效果 |
|---|---|---|
| GET | 获取资源 | |
| HEAD | 获取报文首部 | GET 方法一样,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。 |
| POST | 传输实体主体 | POST 主要用来传输数据,而 GET 主要用来获取资源 |
| PUT | 上传文件 | 由于自身不带验证机制,任何人都可以上传文件 |
| PATCH | 对资源进行部分修改 | PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。 |
| DELETE | 删除文件 | 与 PUT 功能相反,并且同样不带验证机制。 |
| OPTIONS | 查询支持的方法 | 查询指定的 URL 能够支持的方法。 会返回 Allow: GET, POST, HEAD, OPTIONS |
| CONNECT | 要求在于代理服务器通信时建立隧道 | 使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。 示例 CONNECT www.example.com:443 HTTP/1.1 |
| TRACE | 追踪路径 | 服务器会将通信路径返回给客户端。 |


HTTP 和 HTTPS 有什么区别?






HTTP 中 GET 和 POST 的区别是什么?





WebSocket 与 HTTP 有什么区别?






服务端是如何解析 HTTP 请求的数据?(考察 HTTP 请求格式的了解程度)





到底什么是 TCP 连接?





一台服务器,最多能建立多少 TCP 连接?




TCP 和 UDP 有什么区别?





TCP 的粘包和拆包能说说吗?
粘包与拆包是什么?
- 正常情况下,接收端正常收到两个数据包,即没有发生拆包和粘包的现象。

- TCP 接收数据时有滑动窗口控制接收数据大小,可理解为缓冲区大小,缓冲区满了就发送数据,数据包大小不固定。
- 当一次请求发送的数据量小,没达到缓冲区大小,TCP 会合并多个请求发送,形成粘包问题。

- 当一次请求发送的数据量大,超过缓冲区大小,TCP 会拆分数据为多次发送,即拆包,把一个大包拆成多个小包发送。

为什么会发生粘包与拆包
-
TCP 粘包与拆包:
-
TCP 是面向连接的流式传输协议,数据以无明确起止边界的字节流形式传输,需手动划分边界。
-
粘包情况:当发送方每次写入数据小于接收方套接字缓冲区大小时发生。
-
要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
-
接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
-
拆包情况:当发送方每次写入数据大于接收方套接字缓冲区大小时发生。
-
要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
-
待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
-
UDP 无粘包问题:UDP 有保护消息边界,每个 UDP 包带有消息头(含 UDP 长度、源端口、目的端口、校验和)。
-
问题发生层面:粘包拆包问题在数据链路层、网络层、传输层都可能出现,但日常网络应用开发多在传输层,因 UDP 特性,该问题仅在 TCP 协议中发生。





说说 TCP 的三次握手?








TCP 初始序列号 ISN 怎么取值的?

TCP 三次握手时,发送 SYN 之后就宕机了会怎么样?





什么是 SYN Flood 攻击?





TCP 协议是如何保证可靠传输的?






说说 TCP 的四次挥手?



为什么 TCP 挥手需要有 TIME_WAIT 状态?





除了四次挥手,还有什么方法断开连接?




TCP 超时重传机制是为了解决什么问题?






TCP 中何时会出现 RST(reset)报文?





TCP 有超时重传为什么还需要快速重传机制?



TCP 的 SACK 的引入是为了解决什么问题?




TCP 滑动窗口的作用是什么?




说说 TCP 拥塞控制的步骤?




Cookie、Session、Token 之间有什么区别?



JWT Token 能说说吗?




