HTTP协议

 其实先前对这块知识笔者是不太在意的,因为笔者一直没有在编程中触及到相关的知识,昨天偶然机会看到一个程序中有一段这样的代码 <form id="form1" runat="server" method="post" >  其实记得method有Get和Post这两种传递方式,笔者曾经因为学习理论知识也了解过相关知识,但是一段时间之后差不过忘记这块知识。于是想写一篇关于HTTP协议的文章,供今后查询,也给不了解它的朋友有机会接触下它。

  HTTP是超文本协议,它的英文单词Hypertext Transfer Protocol。HTTP是一个基于文本的协议,定义了Web浏览器和Web服务器如果通信。HTTP数据包通过指向目标IP地址的默认端口80的TCP连接进行传输。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

  1.HTTP请求

  浏览器指向一个URL时,它使用可用的DNS将通过URL提供的服务器名转换为一个IP地址。接着,浏览器打开一个套接字(socket),并连接到该IP地址的端口80。带下载请求http://www.contoso.com/default.aspx页面的报文可以采用如下简单形式:

  Get /default.aspx HTTP/1.1

  Host:www.contoso.com

  一个请求中的第一行文本是该请求的开始行。它必须包含要执行的HTTP命令的名称(这里为GET),资源的URL以及要使用的HTTP协议的版本。

  一个HTTP请求可以包含很多报头。HTTP报头是一行有关请求的附加信息文本。上面请求中,以"Host"开头的一行是HTTP报头。HTTP请求中可以发现以下报头:

  •   User-Agent  标识发出该请求的浏览器的类型
  •   Connection  关闭一个连接或保持一个连接有效
  •   If-Modified-Since  提供客户缓存确认

  GET和POST是最常用的HTTP命令或动词。GET命令指检索该请求的URL标识的任何信息。POST命令用来请求初始服务器接受该请求包含的内容并处理它。通常,POST命令用来把一个数据块提供一个数据处理进程。

  2.HTTP响应

  服务器端的响应包括一个状态行,该状态行由消息的协议和一个退出码(表示成功发生一个错误)组成。状态行后面跟着几个报头(通常是页面的内容类型和长度)和主体内容。一个空行将主题内容越消息的其余内容分开,如下面的HTTP响应所示:

  HTTP/1.1 200 OK

  Server:Mircosoft-IIS/5.0

  Content-Type:text/html

  Content-Length:51

  

  <html><body><h1>ASP.NET is cool !</h1></body></html>

  上述代码说明了Web服务器返回简单的HTML输出。请求和响应时根据HTTP模式进行格式化的字符串,它们通过TCP连接进行传输。代码200指该请求一切正常。指定的Web服务器处理该请求,并返回以给定的MIME类型表示的某一长度的内容。HTTP规范列出了可以返回的HTTP代码,HTTP规范参见上述URL。最后一个报头和HTTP响应的内容之间的空行并不只是起着格式化作用,回车和换行是必须的。

  3.构建服务器端抽象层

  浏览器和Web服务器之间的每次会话都会牵涉到报文的交换,如请求的URL是一个HTML页面,则Web服务器通常读取.html文件的内容,并把它刷新到响应报文的文体中。如果URL是一个ASP.NET页面,则会涉及一个特殊IIS模块。这块知识可以在这里看

  4.提交窗体

  HTML<from>标签是唯一被授权的元素,它将客户端数据传输给服务器。当用户单击一个“提交(submit)”类型的按钮时,根据设计,浏览器将该窗体所属的所有控件的内容组成一个字符串。然后将该字符串为GET或POST命令的一部分传递给服务器。

  下面的HTML片段说明一个简单的窗体,该窗体包含一个文本框和一个提交按钮。该窗体将POST命令和default.aspx URL关联在一起:

  <form method="post" action="default.aspx">

    <input type="text" name="EmpCode"/>

    <input type="submit" value="Send"/>

  </form>

  下面的请求用户单击提交按钮后会显示命中该Web服务器的POST命令:
  POST /defualt.aspx HTTP/1.1

  Host:www.contoso.com

  Content-Type:application/x-www-form-urlencoded

  Content-Length:12

  

  EmpCode=1001 

  在处理该页面请求时,ISAPI扩展解析该请求的主题部分,并通过一个对程序更友好的对象模型揭示已发现的任何信息。例如,不是保留一个简单的名称/值对,EmpCode变量移入一个应用级的集合中。这代表在原始的HTTP编程模型之上建立的第一层抽象。Request,Response和Server等对象构成该调用的HTTP上下文,因而代表大多数Web开发平台中的最小对象集合。



      本文知识来源:<ASP.NET> 2.0技术内幕

posted @ 2010-08-09 22:40  胡佳180815  阅读(1188)  评论(0编辑  收藏  举报