详解HTTP4种方法(GET、POST、 PUT和DELETE)
作者:Cyan_Jiang
本文介绍了HTTP协议中的四种方法:GET、POST、PUT和DELETE,分别用于不同的操作,GET用于获取数据,POST用于提交数据,PUT用于创建或更新资源,DELETE用于删除资源,每种方法都有其特点和适用场景,了解这些方法有助于更好地进行数据交互和开发,感兴趣的朋友一起看看吧
一、GET 和 POST
1. GET方法
特点:
- 用途:用于从服务器获取数据。
- 参数传递方式:参数会附加在URL后面,以
key=value的形式,通过查询字符串传递,例如:
http://example.com/page?name=John&age=30
- 可见性:参数是明文的,用户可以直接在浏览器地址栏看到传递的参数。
- 限制:由于URL长度限制(具体限制因浏览器和服务器而异,但一般为2000字符左右),传输的数据量较小。
- 幂等性:GET请求是幂等的,重复发送相同的GET请求不会改变服务器的状态。
- 缓存:GET请求的数据可以被浏览器缓存,也可以被保存在浏览器历史中。
优点:
- 简单直观,适合获取数据。
- 可以通过书签保存,便于分享。
缺点:
- 参数暴露在URL中,敏感数据(如密码)不安全。
- 数据量有限,无法上传较大的数据。
2. POST方法
特点:
- 用途:用于向服务器提交数据,例如表单提交或上传文件。
- 参数传递方式:参数包含在请求体(Body)中,通常是隐式的。例如:
POST /form HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 name=John&age=30
- 可见性:参数不显示在URL中,用户看不到具体传输的内容。
- 限制:几乎没有数据大小限制,可以传输大文件。
- 幂等性:POST请求不是幂等的,每次请求都会对服务器资源产生不同的影响(如新增数据)。
- 缓存:POST请求默认不会被浏览器缓存。
优点:
- 安全性比GET稍高(参数不直接暴露在URL中,但仍需结合HTTPS来保护数据)。
- 支持传输大量数据,适合复杂的数据提交。
缺点:
- 不如GET直观,无法通过URL直接分享。
- 相比GET,性能可能稍低(需要更多的资源来处理请求体)。
3. 总结对比
| 属性 | GET | POST |
|---|---|---|
| 用途 | 获取数据 | 提交数据 |
| 参数传递 | URL查询字符串 | 请求体(Body) |
| 安全性 | 参数明文暴露,不适合敏感数据 | 参数隐藏,但需要HTTPS保护 |
| 数据大小 | 受URL长度限制 | 无明显限制 |
| 幂等性 | 幂等 | 非幂等 |
| 缓存 | 可缓存 | 不可缓存 |
| 可见性 | 参数可见 | 参数不可见 |
选择方法:
- GET:适合只获取数据、无副作用的场景,如加载网页内容。
- POST:适合提交表单数据、上传文件或其他需要修改服务器数据的场景。
二、PUT 和 DELETE
PUT 和 DELETE 是HTTP协议中的两种方法,主要用于对资源执行修改和删除操作。它们和 GET、POST 一样,都是定义在HTTP/1.1中的基本方法,常用于RESTful API中。
1. PUT 方法
特点
用途:用于创建或更新资源。
- 如果指定的资源不存在,则创建新资源。
- 如果指定的资源已存在,则更新该资源。
幂等性:PUT 是幂等的,重复发送相同的 PUT 请求,对服务器的状态不会产生额外影响(相同数据会覆盖现有资源)。
请求体:PUT 请求体中包含需要创建或更新的数据。
示例
场景:创建或更新用户信息。
请求:
PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 47
{
"username": "johndoe",
"email": "john@example.com"
}- 目标资源:
/users/123(用户ID为123的资源)。 - 请求体:包含用户数据。
响应:
- 成功创建资源:
201 Created - 成功更新资源:
200 OK
2. DELETE 方法
特点
- 用途:用于删除服务器上的指定资源。
- 幂等性:DELETE 也是幂等的。对同一资源发送多次 DELETE 请求,结果是一样的:资源被删除(或已经不存在)。
- 请求体:通常不需要请求体,资源信息由 URL 指定。
示例
场景:删除用户信息。
请求:
DELETE /users/123 HTTP/1.1 Host: example.com
- 目标资源:
/users/123(用户ID为123的资源)。
响应:
- 删除成功:
200 OK或204 No Content - 资源不存在:
404 Not Found
3. PUT 和 DELETE 的区别
| 属性 | PUT | DELETE |
|---|---|---|
| 用途 | 创建或更新资源 | 删除资源 |
| 幂等性 | 幂等 | 幂等 |
| 请求体 | 包含资源数据,用于创建或更新 | 通常不需要请求体 |
| 响应状态码 | 200 OK(更新成功),201 Created(创建成功) | 200 OK,204 No Content,或 404 Not Found |
| 对服务器的影响 | 写操作(新增或覆盖资源) | 删除操作 |
4. PUT 和 POST 的对比
- PUT 是幂等的,通常指定资源的完整路径(如
/users/123),强调资源替换。 - POST 不是幂等的,通常操作资源集合(如
/users),强调资源新增。
5. RESTful API 实践建议
- PUT:用来对已有资源进行修改,或在知道资源路径的情况下创建资源。
- DELETE:用来删除指定资源,保证资源唯一性。
- POST:用来新增资源,尤其在路径未知或创建规则复杂时。
三、总结
1. GET (读取数据)
- 作用:从服务器获取数据
- 参数位置:通过 URL 的查询字符串传递参数。
- 请求体:无请求体。
- 幂等性:幂等,多次请求结果相同。
- 适用场景:加载网页内容、获取用户信息等。
- 示例:
GET /users/123 HTTP/1.1
2. POST (创建数据)
作用:向服务器提交数据,通常用于创建新资源
参数位置:数据在请求体中传递。
请求体:有请求体(如表单数据或 JSON)。
幂等性:非幂等,每次请求可能创建新的资源。
适用场景:提交表单、新增用户、上传文件等。
示例:
POST /users HTTP/1.1
Content-Type: application/json
{
"username": "johndoe",
"email": "john@example.com"
}3. PUT (创建或更新数据)
作用:创建或更新指定的资源
参数位置:数据在请求体中传递。
请求体:有请求体(包含完整的资源数据)。
幂等性:幂等,多次请求结果一致。
适用场景:更新用户信息、替换文件等。
示例 :
PUT /users/123 HTTP/1.1
Content-Type: application/json
{
"username": "newname",
"email": "new@example.com"
}4. DELETE (删除数据)
作用:从服务器删除指定的资源
参数位置:资源通过 URL 指定。
请求体:通常无请求体。
幂等性:幂等,多次请求结果相同(资源被删除)。
适用场景:删除用户、删除文件等。
示例:
DELETE /users/123 HTTP/1.1
总结对比表
| 方法 | 作用 | 请求体 | 幂等性 | 适用场景 |
|---|---|---|---|---|
| GET | 查询数据 | 无 | 是 | 获取数据,例如用户信息。 |
| POST | 创建资源 | 有 | 否 | 创建新资源,例如新增用户。 |
| PUT | 更新(或创建)资源 | 有(完整资源数据) | 是 | 更新或替换资源,例如修改用户。 |
| DELETE | 删除资源 | 无(一般) | 是 | 删除指定资源,例如删除用户。 |
简单来说:
- GET = 查。
- POST = 增。
- PUT = 改(或覆盖)。
- DELETE = 删。
四、HTTP状态码合集
| 状态码 | 编码 | 描述 |
|---|---|---|
| 1xx 信息性响应 | ||
| 100 | Continue | 继续,客户端应继续其请求 |
| 101 | Switching Protocols | 服务器正在切换协议 |
| 102 | Processing | 服务器已收到请求,但尚未处理完成(WebDAV) |
| 103 | Early Hints | 预加载资源的早期提示 |
| 2xx 成功响应 | ||
| 200 | OK | 请求成功 |
| 201 | Created | 请求成功并创建了资源 |
| 202 | Accepted | 请求已接受,但尚未处理完成 |
| 203 | Non-Authoritative Information | 请求成功,但返回的内容可能来自第三方 |
| 204 | No Content | 请求成功,但没有返回内容 |
| 205 | Reset Content | 请求成功,客户端应重置文档视图 |
| 206 | Partial Content | 服务器成功处理了部分请求(断点续传) |
| 207 | Multi-Status | 返回多个状态码(WebDAV) |
| 208 | Already Reported | 资源已被报告(WebDAV) |
| 226 | IM Used | 服务器已完成 GET 请求,并使用了实例操作 |
| 3xx 重定向 | ||
| 300 | Multiple Choices | 请求有多个可能的响应 |
| 301 | Moved Permanently | 资源已永久移动 |
| 302 | Found | 资源暂时移动(以前叫“Moved Temporarily”) |
| 303 | See Other | 资源可在另一个 URL 获取 |
| 304 | Not Modified | 资源未修改,可使用缓存 |
| 305 | Use Proxy | 必须通过代理访问(已废弃) |
| 306 | Switch Proxy | 该状态码已被废弃 |
| 307 | Temporary Redirect | 临时重定向,请求方法不变 |
| 308 | Permanent Redirect | 永久重定向,请求方法不变 |
| 4xx 客户端错误 | ||
| 400 | Bad Request | 客户端请求格式错误 |
| 401 | Unauthorized | 需要身份验证 |
| 402 | Payment Required | 预留状态码,未广泛使用 |
| 403 | Forbidden | 服务器拒绝请求 |
| 404 | Not Found | 请求的资源不存在 |
| 405 | Method Not Allowed | 请求方法被禁止 |
| 406 | Not Acceptable | 服务器无法满足请求的内容格式 |
| 407 | Proxy Authentication Required | 需要代理身份验证 |
| 408 | Request Timeout | 请求超时 |
| 409 | Conflict | 资源冲突(例如并发修改) |
| 410 | Gone | 资源已永久删除 |
| 411 | Length Required | 需要指定 Content-Length |
| 412 | Precondition Failed | 请求头条件失败 |
| 413 | Payload Too Large | 请求体过大,服务器无法处理 |
| 414 | URI Too Long | 请求的 URI 过长 |
| 415 | Unsupported Media Type | 不支持的媒体类型 |
| 416 | Range Not Satisfiable | 请求的范围无效 |
| 417 | Expectation Failed | 服务器无法满足 Expect 头的要求 |
| 418 | I’m a teapot | 传统愚人节彩蛋,表示“我是一个茶壶” |
| 421 | Misdirected Request | 请求被发送到错误的服务器 |
| 422 | Unprocessable Entity | 请求格式正确,但无法处理(WebDAV) |
| 423 | Locked | 资源被锁定(WebDAV) |
| 424 | Failed Dependency | 依赖的请求失败(WebDAV) |
| 425 | Too Early | 服务器拒绝处理可能被重放的请求 |
| 426 | Upgrade Required | 需要升级协议 |
| 428 | Precondition Required | 需要前置条件 |
| 429 | Too Many Requests | 客户端发送的请求过多(限流) |
| 431 | Request Header Fields Too Large | 请求头字段太大 |
| 451 | Unavailable For Legal Reasons | 由于法律原因不可用 |
| 5xx 服务器错误 | ||
| 500 | Internal Server Error | 服务器内部错误 |
| 501 | Not Implemented | 服务器不支持该请求 |
| 502 | Bad Gateway | 服务器作为网关时,收到无效响应 |
| 503 | Service Unavailable | 服务器暂时不可用(过载或维护) |
| 504 | Gateway Timeout | 服务器作为网关时,未及时收到上游服务器响应 |
| 505 | HTTP Version Not Supported | 服务器不支持该 HTTP 版本 |
| 506 | Variant Also Negotiates | 服务器内部配置错误 |
| 507 | Insufficient Storage | 服务器存储空间不足(WebDAV) |
| 508 | Loop Detected | 服务器检测到无限循环(WebDAV) |
| 510 | Not Extended | 服务器需要扩展请求 |
| 511 | Network Authentication Required | 需要网络身份验证 |
这个表格已经经过核对,符合最新的 HTTP 标准。
到此这篇关于HTTP4种方法(GET、POST、 PUT和DELETE)的文章就介绍到这了,更多相关http get post put delete内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
