最近在接触C++的HTTP编程,做了一个网络浏览器,仅仅是一个demo版本的,呵呵。下面先介绍一下HTTP的工作原理
HTTP
在介绍HTTP原理之前,不得不提及一位有关Internet的大师级人物,英国计算机科学家蒂姆·伯纳斯·李(Tim Berners-Lee),他发明了web浏览器,使得Internet的应用变得非常广泛,Internet的发展也就进入了万维网时代。万维网(World Wide Web,WWW或3W)是基于http协议的一种网络应用,其主要组成有两部分:一是组成万维网的超链接文档(HTML文档);二是超链接文档的传输协议,即HTTP(Hypertext Transfer Protocol)。在Internet中工作的主机,当要访问万维网的某个网页时,大致经历以下几个步骤(该过程对用户是透明的):
- 用户首先要确定网页文件所在的URL(统一资源定位符),由URL唯一确定用户要访问的文件在Internet上的位置;
- 浏览器向DNS(域名服务器)发出请求,要求把相应的域名转化为IP地址;
- DNS进行查询后,向浏览器发出应答,回复相应的IP地址;
- 在查询得到该网页所在的服务器IP后,就进入HTTP的工作阶段。浏览器向该IP地址的主机发出与端口80建立一条TCP连接的请求(端口80是服务器提供web服务的默认端口);
- 连接建立成功后,浏览器发出一条请求传输网页的HTTP命令。格式为GET/待访问的网页文件;
- 当改域名的服务器收到请求后,向浏览器发送相应的待访问的网页文件;
- 发送完成后,由服务器主动关闭TCP连接,至此,HTTP的工作过程结束;
- 浏览器显示收到的相应网页文件;若改网页文件中包含图片,则还要与服务器再次建立一个TCP连接以下载图片。
在上述的工作步骤中,对浏览器来说最关键的问题是如何把HTML文档下载到本地的主机上,该任务是由HTTP来完成的,可以认为,HTTP是Web服务的基础。
HTTP即超文本传输协议,1990年提出,目前万维网上使用的主要版本是HTTP/1.0和HTTP/1.1。HTTP工作于客户端-服务器模式(C-S模式),浏览器是客户端,接收连接并对请求返回信息的应用程序是Web服务器。在实际工作时,浏览器相当于一个用户代理(User Agent),用户要求完成的各种操作均由它向Web服务器提出,并处理又服务器返回给客户端的响应。
下面介绍一下另外一个概念:URL
URL
URL即统一资源定位符(Uniform Resource Locator,URL),是用来表示从Internet上得到资源位置的访问这些资源的方法。URL给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新、替换等。URL相当于一个文件名在网络范围的扩展,可以认为是与Internet相连的机器上的任何可访问对象的一个指针,其组成有如下四部分:
<协议>://<主机>:<端口>/<路径>
呵呵,在进入开发之前,先介绍一下MFC对浏览器开发提供的技术支持。
MFC提供的技术支持
浏览器(Browser)是万维网的客户端浏览程序,可以向Web服务器发送各种请求,并对服务器返回的超文本信息和各种媒体数据格式进行解析、显示和播放。目前,PC上常用的浏览器有IE、Mozilla的Firefox、360安全浏览器、腾讯TT浏览器等。从软件开发的角度来看,可以认为浏览器软件的构成有如下两部分:Socket程序和HTTP协议。
MFC(Microsoft Foundation Classes,微软基础类库,一种应用框架)在Windows API的基础上封装了一组C++类,以C++类库的形式构建了面向对象的框架。自然对于浏览器的开发,