get 请求
get 表示向 服务器 请求指定的资源
get 请求是安全的,不会修改服务器数据
get 请求是 幂等的,多次请求的结果是相同的(除非资源被修改了)
get 请求是可以被缓存的。
get请求的参数被 放在url的末尾用?隔开,键值对之间用&连接。请求体为空
post 请求
post 请求表示向服务器提供指资源。 可能创建或修改资源。
post 请求是 不安全的。 因为 它会对服务器产生副作用。
post请求 不是 幂等的。 因为可能创建两个相同的资源
post请求 不能被缓存。
post 请求的提交的资源在请求体中。content-type 表示请求体的类型。content-length表示请求体的大小。 请求头也可以像get方法一样。
在 HTTP 协议(RFC 9110, 原 RFC 7231)中,
“安全(Safe)” 并不是指“不会被黑”或“不会泄露隐私”,
而是指: “执行这个方法不会对服务器端的状态产生副作用(修改资源)。换句话说:
- 安全(Safe)方法:是只读的;
- 非安全(Unsafe)方法:是会改变资源状态的。
“幂等” =
多次调用结果一样
put 请求
put请求表示 整体更新一个已存在的资源。(如果资源不存在,有时也可以用于创建)。
put请求 不是安全的。 因为会对服务器产生副作用。
put请求是幂等的。 因为多次请求对服务器产生的影响是一样的。修改同一个资源。
put请求不能被缓存。
delete 请求
delete请求表示 删除指定的资源。
delete不是安全的。 会对服务器产生副作用。
delete是幂等的。 对服务器产生的影响是一样的。 删除同一个资源
patch 请求
patch请求 部分更新指定的资源。
patch请求不是安全的
patch请求不是幂等的。 比如一个商品数量加1,两次请求数量都变成2了
HTTP 请求的通用结构
在比较区别之前,我们先看一个 HTTP 请求的通用结构,它由四部分组成:
- 请求行 (Request Line) :方法 URL HTTP版本,例如 GET /search?q=hello HTTP/1.1
- 请求头 (Request Headers) :一系列键值对,提供关于请求的元数据,例如 Host:
www.example.com - 空行 (Blank Line) :一个必须存在的空行,用来分隔请求头和请求体。
- 请求体 (Request Body) :实际要传输的数据,例如 JSON 字符串或表单数据。 (注意:不是所有请求都有请求体)
GET 请求结构示例:
codeHttp
GET /users?id=123&sort=name HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
POST 请求结构示例:
codeHttp
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 56
{
"name": "Alice",
"email": "alice@example.com",
"age": 30
}
PUT 请求结构示例:
codeHttp
PUT /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 56
{
"name": "Alice Smith",
"email": "alice.smith@example.com",
"age": 31
}
PATCH 请求结构示例:
codeHttp
PATCH /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 28
{
"email": "new.email@example.com"
}
DELETE 请求结构类似:
codeHttp
DELETE /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>