http协议及Get与post操作的差异

  问及http文件头里面有什么内容,Get与post操作的差异及Get操作时是否会传送viewstate的数据?发现自己说不出个所以然来,于是上网找了些资料,写了下来,以作以后翻阅使用。

一、什么是http协议?

  http是http hypertext transfer protocol的简写,即超文本传输协议,是互联网上应用最为广泛的一种网络协议。是客户端和服务器端间请求和应答的标准。客户端是终端用户,服务器端是网站。通过使用Web浏览器或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)调用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

  通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

二、HTTP消息

  通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息都是由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的。

  请求消息起始行的格式:Method Request-URI HTTP-Version

  Method 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。 HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。

  Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。

  HTTP- Version表示支持的HTTP版本。

  响应消息起始行的格式:HTTP-Version Status-Code Reason-Phrase

  HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。

  Status- Code是一个三个数字的结果代码,主要用于机器自动识别。第一个数字定义响应的类别,可能取5个不同的值,后两个数字没有分类的作用。

  1xx:信息响应类,表示接收到请求并且继续处理。

  2xx:处理成功响应类,表示动作被成功接收、理解和接受。

  3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理。

  4xx:客户端错误,客户请求包含语法错误或者是不能正确执行。

  5xx:服务端错误,服务器不能正确执行一个正确的请求。

  其他的内容这里就不介绍了,请查看 http文件头详解

  Reason-Phrase给Status-Code提供一个简单的文本描述,主要用于帮助用户理解。

  下面是一对请求和响应消息:

  

三、Get与post操作的差异

  1. 提交数据存放位置:GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中。

  2. 传送数据量大小:GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。

  3. 安全性:GET安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。POST的所有操作对用户来说都是不可见的。

  上面的2,3点差异其实就是1的延伸,因此Get与Post操作差异的根本是提交数据存放位置。

四、提交了那些数据

  下面是POST操作时提交数据:

  

  下面是GET操作时提交数据:

  

  可以发现GET与POST提交的数据时一模一样的。除了控件的数据外,还有__EVENTVALIDATION和__VIEWSTATE两个字段的数据。因此,GET操作时会提交VIEWSTATE的数据。

参考文章:

  http文件头详解

  HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等

posted @ 2010-05-26 17:14  hs0014  阅读(426)  评论(0编辑  收藏  举报