HTTP协议——HTTP方法
这里对一些基本HTTP方法进行更为深入的讨论,并不是每个服务器都实现了所有的方法,如果要跟HTTP1.1兼容,那么只要为其资源实现GET方法和HEAD方法就可以了。
即使服务器实现了所有这些方法,这些方法的使用很可能也是受限的,这些限制通常都是在服务器的配置中进行设置的,因此会随着站点和服务器的不同而有所不同。
1、GET
GET是最常用的方法,通常用于请求服务器发送某个资源。HTTP/1.1 要求服务器实现该方法。下图为客户端用GET方法发起一次HTTP请求。
2、HEAD
HEAD方法和GET方法的行为很类似,但是服务器在响应中只返回首部,不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
使用HEAD方法有以下优点:
- 在不获取资源的情况下了解资源的情况(比如:判断其类型);
- 通过查看响应的状态码,看看某个对象是否存在;
- 通过查看首部,测试资源是否被修改了
必须确保返回的首部与GET请求所返回的首部完全相同,遵循HTTP/1.1规范,就必须实现HEAD方法。下图为HEAD方法的实际用法:
3、PUT
与GET从服务器读取文档想法,PUT方法会向服务器写入文档。PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新闻的,或者替换已存在的URL。具体使用方法如下:
因为PUT允许用户对内容进行修改,所以很多Web服务器都要求在执行PUT之前,用密码登录。
4、POST
POST方法期初是用来向服务器输入数据的,实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。
下图为POST方法发起HTTP请求发送表单数据的示例图:
GET和POST的区别:
login.action?name=hyddd&password=idontknow&verify=%E4%BD%E5%A5%BD
其中,以?来分隔URL和数据;以&来分隔参数;如果数据是英文或数字,原样发送;如果数据是中文或其它字符,则进行BASE64编码。
而Post是把提交的数据放在HTTP正文中的。
2、GET提交的数据比较少,最多1024B,因为GET数据是附在URL之后的,而URL则会受到不同环境的限制的,比如说IE对其限制为2K+35,而POST可以传送更多的数据(理论上是没有限制的,但一般也会受不同的环境,如浏览器、操作系统、服务器处理能力等限制,IIS4可支持80KB,IIS5可支持100KB)。
3、Post的安全性要比Get高,因为Get时,参数数据是明文传输的,参数直接暴露在url中,所以不能用来传递敏感信息。而且使用GET的话,还可能造成Cross-site request forgery攻击。而POST数据则可以加密的,但GET的速度可能会快些。
4、get请求只能进行url编码,而post支持多种编码方式;get请求会浏览器主动cache,而post支持多种编码方式;get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
5、GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
6、GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
5、trace
客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或者其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成什么样子了。TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链上,原始报文是否被毁坏,以及如何被毁坏或修改过。
具体示例如下:
TRACE的缺点是:它假定中间应用程序对各种不同类型请求的处理是相同的。很多HTTP应用程序会根据方法的不同做出不同的事情,例如代理会把POST请求直接发给服务器,而GET请求发送给另一个HTTP应用改程序(比如缓存)。TRACE不提供区分这些方法的机制,通常中间应用程序会自行决定对TRACE请求的处理方式。
TRACE请求中不能带有实体的主体部分。TRACE响应的实体主体部分包含了响应服务器收到的请求的精确副本。
6、OPTIONS
OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支撑哪些方法。(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。
下图为使用OPTIONS方法的请求:
7、DELETE
DELETE方法所做的事情就是请服务器删除请求URL所指定的资源。但客户端应用程序无法保证删除操作一定会被执行。因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。DELETE方法实例如下:
8、扩展方法
http被设计成可扩展的,这样新特性就不会使老的版本失效。扩展方法指的是没在HTTP/1.1中规范定义的,服务器为它管理的资源实现一些HTTP服务,为开发者提供了一种扩展这些HTTP服务能力的手段
下表列出了一些常用的扩展方法:
LOCK:允许用户“锁定资源”编辑某个资源时将其锁定,以防别人同时对其修改
MKCOL:允许用户创建资源
COPY:便于在服务器上复制资源
MOVE:在服务器上移动资源
上面例子中的方法便于用过http将web内容发布到web服务器上。
不是所有的扩展都是在正式规范中定义的,因此,扩展方法秉持“对发送内容要求严格,对所接受的内容宽容点”来处理一般的HTTP扩展方法很重要。