注:本文资料来自《HTTP权威指南》及网上资料,针对HTTP1.1版本
GET
GET是最常用的方法,通常用于请求服务器发送某个资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求不包含实体。
根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
(1) 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
(2) 幂等的意味着对同一URL的多个请求应该返回同样的结果。
请求报文示例:
GET /example/test.html HTTP/1.1
Host: www.test.com
Accept: *
响应报文示例:
HTTP/1.1 200 OK
Content-Type: text/html
Context-Length: 600
<HTML>
...
HEAD
HEAD方法与GET方法极其类似,唯一不同的是服务器只会返回头部不会返回实体。这就允许客户端在未获取实际资源的情况下,对资源的头部进行检查。
- 在不获取资源的情况下了解资源的情况(例如判断其类型);
- 通过查看相应中的状态码,看看某个对象是否存在;
- 通过查看头部,测试资源是否被修改了。
HEAD /example/test.html HTTP/1.1
Host: www.test.com
Accept: *
响应报文示例:
HTTP/1.1 200 OK
Content-Type: text/html
Context-Length: 600
PUT
与GET从服务器读取资源相反,PUT方法会向服务器写入资源。这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。有些发布系统允许用户创建web页面并用PUT直接将其放到Web服务器上。
PUT方法是让服务器用请求的主体来创建一个由所请求的URL命名的新文档。如果那个URL已经存在,则会用这个主体来替代。
因为PUT允许用户对内容进行修改,所以一般来说在执行PUT之前都会要求用户进行登录。
请求报文示例:
PUT /test.txt HTTP/1.1
Host: www.test.com
Content-type: text/plain
Content-length: 4
test
响应报文:
HTTP/1.1 201 Created
Location: http://www.test.com/test.txt
Content-Type: 30
http://www.test.com/test.txt
POST
向服务器提交数据。通常用于表单操作。
POST和GET的区别
- get是从服务器上获取数据,post是向服务器传送数据。
- get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
- get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
- get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
POST /test.php HTTP/1.1
Host: www.test.com
Content-type: text/plain
Content-length: 10
name=test
HTTP/1.1 200 OK
Content-Type: text/plain
Context-Length: 26
The name has been stored.
TRACE
TRACE /test.txt HTTP/1.1
Accept: *
Host: www.test.com
经过代理后的请求报文:
TRACE /test.txt HTTP/1.1
Host: www.test.com
Accept: *
Via: 1.1 proxy.test.com
服务器响应报文:
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 76
TRACE /test.txt HTTP/1.1
Host: www.test.com
Accept: *
Via: 1.1 proxy.test.com
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 76
Via: 1.1 proxy.test.com
TRACE /test.txt HTTP/1.1
Host: www.test.com
Accept: *
Via: 1.1 proxy.test.com
OPTIONS
TRACE * HTTP/1.1
Accept: *
Host: www.test.com
HTTP/1.1 200 OK
Allow: GET, POST, PUT, OPTIONS
Context-length: 0
DELETE
DELETE /test.txt HTTP/1.1
Host: www.test.com
响应报文:
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 9
Success!
扩展方法
方法 | 描述 |
---|---|
LOCK | 允许用户“锁定”资源——例如可以在编辑某个资源的时候将其锁定,以防别人同时对其进行修改 |
MKCOL | 允许用户创建资源 |
COPY | 便于在服务器上复制资源 |
MOVE | 在服务器上移动资源 |