HTTP4种方法(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

PUTDELETE 是HTTP协议中的两种方法,主要用于对资源执行修改和删除操作。它们和 GETPOST 一样,都是定义在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": "[email protected]"
    }
    
    • 目标资源:/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 OK204 No Content
    • 资源不存在:404 Not Found

3. PUT 和 DELETE 的区别

属性 PUT DELETE
用途 创建或更新资源 删除资源
幂等性 幂等 幂等
请求体 包含资源数据,用于创建或更新 通常不需要请求体
响应状态码 200 OK(更新成功),201 Created(创建成功) 200 OK204 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": "[email protected]"
    }
    

3. PUT (创建或更新数据)

  • 作用创建或更新指定的资源

  • 参数位置:数据在请求体中传递。

  • 请求体:有请求体(包含完整的资源数据)。

  • 幂等性:幂等,多次请求结果一致。

  • 适用场景:更新用户信息、替换文件等。

  • 示例 :

    PUT /users/123 HTTP/1.1
    Content-Type: application/json
    
    {
      "username": "newname",
      "email": "[email protected]"
    }
    

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 标准。

你可能感兴趣的:(日志转发,https,http)