天天看点

HTTP协议请求方式: 中GET、POST和HEAD的介绍

      http是web协议集中的重要协议,它是从客户机/服务器模型发展起来的。客户机/服务器是运行一对相互通信的程序,客户与服务器连接时,首先,向服务 器提出请求,服务器根据客户的请求,完成处理并给出响应。浏览器就是与web服务器产生连接的客户端程序,它的端口为tcp的80端口。浏览器与web

服务器之间所遵循的协议就是http。

  请求方法是请求一定的web页面的程序或用于特定的url。可选用下列几种:

get: 请求指定的页面信息,并返回实体主体。

head: 只请求页面的首部。

post: 请求服务器接受所指定的文档作为对所标识的uri的新的从属实体。

put: 从客户端向服务器传送的数据取代指定的文档的内容。

delete: 请求服务器删除指定的页面。

options: 允许客户端查看服务器的性能。

trace: 请求服务器在响应中的实体主体部分返回所得到的内容。

patch: 实体中包含一个表,表中说明与该uri所表示的原内容的区别。

move: 请求服务器将指定的页面移至另一个网络地址。

copy: 请求服务器将指定的页面拷贝至另一个网络地址。

link: 请求服务器建立链接关系。

unlink: 断开链接关系。

wrapped: 允许客户端发送经过封装的请求。

extension-mothed:在不改动协议的前提下,可增加另外的方法。

  当服务器响应时,其状态行的信息为http的版本号,状态码,及解释状态码的简单说明。关于http状态码详细说明请参见前几天发的“iis w3c日志记录字段和http状态代码的说明”和“iis中http 状态代码”。

  最基本的方法是 get 和 post。事实上 get 适用于多数请求,而保留 post 仅用于更新站点。根据 http 规范,get 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,get 请求一般不应产生副作用。幂等的意味着对同一

url 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。post 请求就不那么轻松了。post 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 post 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);

  在form提交的时候,如果不指定method,则默认为get请 求,form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%xx,其中xx为 该符号以16进制表示的ascii(或iso latin-1)值。get请求请提交的数据放置在http请求协议头中,而post提交的数据则放在实体数据中;

  get方式提交的数据最多只能有1024字节,而post则没有此限制。

在表单里使用”post”和”get”有什么区别:

在form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同:

1、get方法通过url请求来传递用户的输入。post方法通过另外的形式。

2、get方式的提交你需要用request.querystring来取得变量的值,而post方式提交时,你须通过request.form来访问提交的内容,当然两者都可以使用request直接获取。

不过通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在url上。如果:

1、登陆页面可以被浏览器缓存;

1、其他人可以访问客户的这台机器。

那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。

建议在form中,建议使用post方法。

如果用head方法请求的话,则服务器返回的只是请求页面的首部,而不会返回被请求的文挡,head方法通用于一些搜索引擎中。

继续阅读