您的位置:首页 > 理论基础 > 计算机网络

HTTP方法总结

2016-01-19 09:46 411 查看
注:本文资料来自《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[/code] 

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

客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端了解请求最终到达服务器时变成什么样。
TRACE方法的响应报文主体是服务器最终收到的请求报文的头部,实际上,TRACE请求报文不会有实体,而服务器一般返回200。
TRACE方法主要用于诊断,判断请求经过的路径是不是预料中的,也可以用来查看代理和其他应用程序是如何处理用户请求的。
但TRACE方法也有缺点,它假定中间应用程序对不同类型的请求(GET、POST等等)的处理是一样的,但很多HTTP应用程序会根据方法的不同做不同的处理,例如可能将POST请求直接发给服务器而将GET请求发给另一个HTTP应用程序(例如缓存)。
服务器开启TRACE方法可能遭受攻击,详见TRACE Method 网站漏洞,你关闭了吗

请求报文:
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

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方法是请求服务器删除请求URL所指定的资源,但是客户端无法保证该资源一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。
请求报文:
DELETE /test.txt HTTP/1.1
Host: www.test.com


响应报文:
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 9

Success!

扩展方法

HTTP被设计成字段可扩展的,扩展方法指的就是没有在HTTP/1.1规范里定义的方法。这些方法可能有些HTTP应用程序不会识别。

常用的扩展方法

方法描述
LOCK允许用户“锁定”资源——例如可以在编辑某个资源的时候将其锁定,以防别人同时对其进行修改
MKCOL允许用户创建资源
COPY便于在服务器上复制资源
MOVE在服务器上移动资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: