计网八股

向下滚动可查看阅读进度

(详细看语雀文档,这里只有一部分)

HTTP 请求与响应结构

HTTP 通信本质上是:

Client
↓ Request
Server
↓ Response
Client

HTTP Request

HTTP 请求通常由三部分组成:

请求行 Request Line
请求头 Request Headers
请求体 Request Body

例如:

POST /login HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "username": "Navi"
}

请求行:

POST        → Method,请求方法
/login      → 请求路径
HTTP/1.1    → HTTP 版本

常见请求头:

Host         → 访问的域名
User-Agent   → 客户端信息
Accept       → 希望接收的数据类型
Content-Type → 请求体的数据类型

Request Body 就是客户端真正提交的数据。


HTTP Response

HTTP 响应通常由三部分组成:

状态行 Status Line
响应头 Response Headers
响应体 Response Body

例如:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "name": "Navi"
}

状态行:

HTTP/1.1 → HTTP 版本
200      → Status Code,状态码
OK       → 状态描述

常见响应头:

Content-Type   → 返回的数据类型
Content-Length → 数据长度
Cache-Control  → 缓存策略
Set-Cookie     → 设置 Cookie

Response Body 就是服务器真正返回的数据。

总结

Request
= 请求行 + 请求头 + 请求体

Response
= 状态行 + 响应头 + 响应体

术语

  • HTTP:HyperText Transfer Protocol,超文本传输协议
  • Request:请求
  • Response:响应
  • Method:请求方法
  • Header:头部
  • Body:消息体
  • Status Code:状态码

GET和POST区别

GET 和 POST 都是 HTTP Method(请求方法)。

GET

  • 主要用于获取资源
  • 参数通常放在 URL 的 Query String 中
GET /search?keyword=javascript&page=1
  • GET 应该是 Safe(安全方法)
    • 原则上不应该修改服务器资源
  • GET 是 Idempotent(幂等)
    • 请求一次和请求多次,对服务器产生的最终效果相同
  • 更适合被浏览器、CDN 等缓存
  • URL 长度可能受到浏览器或服务器限制,因此不适合传输大量参数

POST

  • 主要用于提交数据或执行操作
  • 数据通常放在 Request Body 中
POST /blogs HTTP/1.1
Content-Type: application/json

{
  "title": "Hello"
}
  • 常用于:
    • 提交表单
    • 创建用户
    • 创建订单
    • 发布博客
  • POST 通常不是幂等的

例如:

POST /blogs

执行一次可能创建一篇博客,执行两次可能创建两篇博客。

  • POST 默认情况下通常不会像 GET 一样被缓存,但 HTTP 并没有规定 POST 绝对不能缓存
  • Request Body 本身没有 GET 那种 URL 长度问题,但实际数据大小仍可能受到服务器配置等限制

安全性

不能简单说:

POST 比 GET 更安全

GET 参数通常会显示在 URL 中:

/login?password=123456

因此更容易出现在:

  • 浏览器历史记录
  • 日志
  • 地址栏

POST 数据通常在 Body 中,不会直接显示在 URL。

但:

GET 和 POST 本身都不负责加密。

真正保护数据传输安全的是:

HTTPS / TLS

GET vs POST

GETPOST
主要获取资源主要提交数据
参数通常在 URL数据通常在 Body
Safe通常会产生副作用
Idempotent通常非 Idempotent
更适合缓存默认较少缓存
URL 长度可能受限Body 大小取决于服务器等限制

重点术语

Idempotent:幂等

同一个操作执行一次和执行多次,最终效果相同。

例如:

GET /user/1

执行 1 次和 10 次,都只是获取用户信息。

而:

POST /blogs

执行多次可能创建多篇博客,因此通常不是幂等的。

面试简答

GET 和 POST 都是 HTTP 请求方法。GET 主要用于获取资源,参数通常放在 URL 中,并且应该是安全、幂等的,也更适合缓存。POST 主要用于提交数据,数据通常放在请求体中,常用于创建资源或执行操作,通常不是幂等的。GET 和 POST 本身都不负责加密,真正的数据传输安全主要依赖 HTTPS。