HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序号 方法 描述 是否包含主体 安全 幂等
1 GET 从服务器获取一份文档
2 HEAD 类似于GET,只从服务器获取文档的首部
3 PUT 与GET相反,将请求的主体部分存储在服务器上
4 POST 向服务器发送需要处理的数据
5 TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
6 OPTIONS 请求服务器告知其支持的各种功能
7 DELETE 请求服务器删除请求URL所指定的资源

名词解释

安全性:客户端可以发起请求,并知道它不会改变资源的状态。
幂等性:保证客户端重复发起某个请求的效果与一次请求的效果一致。

GET

GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.

  • 请求:只有header,没有body。
  • 响应:对应请求URI的资源表述,通常带有body。响应header中的Content-Type,Content-Length,Content-Language,Last-Modified,ETag等应该和响应body的表述一致。

请求报文

GET /hello HTTP/1.1
Host: localhost

响应报文

1
2
3
4
5
6
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length: 21

<hello>tester</hello>
......

HEAD方法与GET方法行为类似,但服务器在响应中只返回首部。不会返回实体的主体部分。

用处:

在不获取资源的情况下了解资源的情况(比如:判断其类型);
通过查看响应中的状态码,看看某个对象是否存在;
通过查看首部,测试资源是否被修改了。

服务器必须确保返回的首部与GET请求所返回的首部完全相同。

  • 请求:只有header,没有body。
  • 响应:只有header,没有body。服务器不能添加body。

请求报文

1
2
GET /hello HTTP/1.1
Host: localhost

响应报文

1
2
3
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length: 21

PUT

PUT方法就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用这个主体来替代它。 因为PUT允许用户对内容进行修改,所以很多Web服务器都要求在执行PUT之前,用密码登录。

  • 请求:一个资源的表述。请求的body可以与客户端后续收到的GET请求一样,当然,也可以不一样。在某些情况下,服务器也可要求客户端只提供资源的可变部分。
  • 响应:更新的状态。可在响应中包含被更新资源的完整表述,但是客户端不能假设响应中包含完整状态,除非响应有一个Content-Location头。如果服务器没有包含这个头,客户端必须提交一个无条件GET请求来获取更新后的表述,带有Last-Modified和/或ETag头。

创建资源的请求

请求报文

1
2
PUT /stu/alice HTTP/1.1
Host: localhost

响应报文

1
2
3
HTTP/1.1 201 Created
Location: http://localhost/stu/alice
Content-Length: 0

更新资源的请求

请求报文

1
2
PUT /stu/bob HTTP/1.1
Host: localhost

响应报文

1
HTTP/1.1 204 No Content

POST

向服务器发送需要处理的数据,例如提交表单或者上传文件。 数据被包含在请求体中
POST请求可能会导致服务器上新的资源的建立和/或已有资源的修改。

  • 请求:一个资源的表述。
  • 响应:一个资源的表述,或是一个重定向指令。如果body中存在表述,则其URI和请求URI不一致,包含一个带有改资源URI的Content-Location头。

执行动作

请求报文

1
2
POST /prompt/delete HTTP/1.1
Host: localhost

响应报文

1
HTTP/1.1 204 No Content

创建资源

请求报文

1
2
3
4
5
6
7
8
POST /stu/bob HTTP/1.1
Host: localhost
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>22</age>
</student>

响应报文

1
2
3
4
5
6
7
8
9
HTTP/1.1 201 Created
Location: http://localhost/stu/bob
Content-Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>22</age>
</student>

修改资源

请求报文

1
2
3
4
5
6
7
8
POST /stu/bob/modify HTTP/1.1
Host: localhost
Content-Type: application/json

{
    "Name": "Bob",
    "Age": 24
}

响应报文

1
2
3
4
5
6
7
8
HTTP/1.1 303 See Other
Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>24</age>
</student>

TRACE

客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发给服务器时,看看它变成什么样子。

TRACE方法主要用于诊断;用于验证请求是否如愿穿过了请求/响应链。它也是一种很好的工具,可以用来查看代理和其他应用程序对用户请求所产生效果。

请求:header与body。 响应:body中包含整个请求消息。

请求报文

1
2
3
TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html

响应报文

1
2
3
4
5
6
HTTP/1.1 200 OK
Content-Type: message/http

TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html

OPTIONS

OPTIONS 方法请求服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。 这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。

请求:只有header没有body。 响应:默认只有header,但是也可以在body中添加内容,比如描述性文字

请求报文

1
2
OPTIONS /test-options HTTP/1.1
Host: localhost

响应报文

1
2
HTTP/1.1 204 No Content
Allow: GET, POST, OPTIONS

DELETE

请求服务器删除请求URL所指定的资源。

请求:只有header,没有body。 响应:成功或失败。body中可以包含操作的状态。

请求报文

1
2
DELETE /doc/old.txt HTTP/1.1
Host: localhost

响应报文

1
HTTP/1.1 204 No Content

HTTP请求扩展方法

序号 方法 描述
8 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
9 PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10 MOVE 请求服务器将指定的页面移至另一个网络地址。
11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。
12 LINK 请求服务器建立链接关系。
13 UNLINK 断开链接关系。
14 WRAPPED 允许客户端发送经过封装的请求。
15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。

更多-more