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技术内幕