HTTP Request Method (请求方法) - get, post, put, delete, head, options, trace, connect

创建时间:
2014-02-15 06:53
最近更新:
2018-09-05 12:33

Brief

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP 1.0 中只有 3 种请求方法: GET, POST 和 HEAD。
HTTP 1.1 中新增加了 5 种请求方法: OPTIONS, PUT, DELETE, TRACE 和 CONNECT。

HTTP/1.1 定义了 8 种 HTTP 方法

HTTP/1.1 RFC 2616 第 5.1.1 Method 一节共定义了 8 种 HTTP 方法来表明 Request-URI 指定的资源的不同操作方式:

  1. GET (获取): 向特定的资源发出请求。注意:GET 方法不应当被用于产生“副作用”的操作中,例如在 Web Application 中。其中一个原因是 GET 可能会被网络蜘蛛等随意访问。
  2. POST (创建): 向指定资源提交数据进行处理请求 (例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  3. PUT (修改): 向指定资源位置上传其最新内容。
  4. DELETE (删除): 请求服务器删除 Request-URI 所标识的资源。
  5. HEAD: 向服务器索要与 GET 请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  6. OPTIONS: 返回服务器针对特定资源所支持的 HTTP 请求方法。也可以利用向 Web 服务器发送'*'的请求来测试服务器的功能性。
  7. TRACE: 回显服务器收到的请求,主要用于测试或诊断。
  8. CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

PUT 和 DELETE 方法是冪等方法。GET 方法是安全方法 (不会对服务器端有修改,因此也是幂等的)。

方法名称区分大小写。

当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码 405 (Method Not Allowed);
当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码 501 (Not Implemented)。

HTTP 服务器至少应该实现 GET 和 HEAD 方法,其他方法都是可选的。

除了上述方法,特定的 HTTP 服务器还能够扩展自定义的方法。

System.Web.Mvc.HttpVerbs 枚举 中的 7 个动词

  • 该枚举的源码在本文下方。
  • 这 7 个动词 与 System.Web.Mvc 命名空间 下的 7 个相关属性 (Attribute) 一致。

System.Web.Mvc 命名空间 下的 7 个相关属性 (Attribute)

  1. HttpDeleteAttribute
  2. HttpGetAttribute
  3. HttpHeadAttribute
  4. HttpOptionsAttribute
  5. HttpPatchAttribute
  6. HttpPostAttribute
  7. HttpPutAttribute
  • 以上 7 个属性 在 MSDN 的描述相似: Represents an attribute that is used to restrict an action method so that the method handles only HTTP DELETE/GET/HEAD/OPTIONS/PATCH/POST/PUT requests (译文: 表示 一个属性,该属性 被用于 限制 一个操作方法,以便 该方法 只处理 HTTP DELETE/GET/HEAD/OPTIONS/PATCH/POST/PUT 请求).
  • 以上 7 个属性 与 System.Web.Mvc.HttpVerbs 枚举 中的项 一致。

ASP.NET Web API - Action Selection (动作选择)

详见本站专文

Source Code of System.Web.Mvc.HttpVerbs from JetBrains dotPeek 1.0 at 2018-09-05

Complete Copy:

// Type: System.Web.Mvc.HttpVerbs
// Assembly: System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll

using System;

namespace System.Web.Mvc
{
  [Flags]
  public enum HttpVerbs
  {
    Get = 1,
    Post = 2,
    Put = 4,
    Delete = 8,
    Head = 16,
    Patch = 32,
    Options = 64,
  }
}