Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1661692
  • 博文数量: 695
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4027
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(695)

文章存档

2018年(18)

2017年(74)

2016年(170)

2015年(102)

2014年(276)

2013年(55)

分类: Web开发

2014-04-29 20:35:51

原文地址:HTTP概述 作者:scq2099yt

一、Web客户端和服务器
        Web内容存储在Web服务器上,Web服务器使用HTTP协议,因此也被称为HTTP服务器。HTTP客户端向服务器发起HTTP请求,服务器会在HTTP响应中回送所有请求的数据:

图1 Web客户端和服务器
        用户浏览一个页面时,浏览器会想Web服务器发送一条HTTP请求,服务器会去寻找所期望的对象,如果成功就将对象、对象类型、对象长度以及其它一些信息放在HTTP响应中发送给浏览器。

二、资源
        Web服务器是Web资源的宿主,Web资源可是最简单的静态文件,也可以是根据需要动态生成内容资源,如下图:

图2 所有能够提供Web内容的东西都是Web资源
1、媒体类型
        Web服务器会为所有HTTP对象数据打上MIME类型的数据格式标签。,如图3。当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象,比如:显示图片、解析并格式化HTML、播放音频/视频等。

图3 与数据内容一同回送的MIME类型
        MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由斜杠来分隔,常见的MIME类型如下:
        (1)HTML格式的文本文档由text/html类型来标记。
        (2)普通的ASCII文本文档由text/plain类型来标记。
        (3)JPEG格式的图片为image/jpeg类型。
        (4)GIF格式的图片为image/gif类型。
        (5)Apple的QuickTime电影为video/quicktime类型。
        (6)微软的PowerPoint演示文件为application/vnd.ms-powerpoint类型。
2、URI
        每个Web服务器资源都有一个名字,称为统一资源标识符(Uniform Resource Identifier, URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源,比如:
       
        这个URI表示用HTTP协议去访问Joe商店服务器商店图片资源saw-blade.gif。URI有两种形式:URL和URN。
3、URL
        统一资源定位符(URL)是资源标识符最常见的形式(现在几乎所有的URI都是URL),用于描述一台特定服务器上某资源的特定位置,其明确地说明如何从一个精确固定的位置获取资源,图3显示了URL如何精确地说明某资源的位置以及如何去访问它:

图4 URL说明了协议、服务器和本地资源
        大部分URL都遵循一种标准格式,这种格式包含三个部分:
        (1)URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型,这部分通常就是HTTP协议(http://)。
        (2)第二部分给出了服务器的因特网地址,比如:。
        (3)其余部分指定了Web服务器上的某个资源,比如:/specialssaw-blade.gif。
4、URN
        统一资源名(URN)是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。URN还可以用同一个名字通过多种网络协议来访问资源,比如:不论因特网标准文档RFC 2141位于何处,都可以用下列URN来命名它:
        urn:ietf:rfc:2141
        很爽,但是URN还处于试验阶段,还未大范围使用。

三、事务
        一个HTTP事务由一条(从客户端发往服务器的)请求命令和一条(从服务器返回客户端的)响应结果组成,这种通信是通过名为HTTP报文(HTTP message)的格式化数据块进行的:

图5 包含请求及响应报文的HTTP事务
1、方法
        HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每条HTTP请求报文都包含一个方法,这个方法会告诉服务器要执行什么动作,比如:获取一个Web页面、运行一个网关程序、删除一个文件等。下面是五种常见的HTTP方法:
        GET:从服务器向客户端发送命名资源。
        PUT:将来自客户端的数据存储到一个命名的服务器资源中去。
        DELETE:从服务器中删除命名资源。
        POST:将客户端数据发送到一个服务器网关应用程序。
        HEAD:仅发送命名资源响应中的HTTP首部。
2、状态吗
        每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其它工作,以下是几种常见的状态码:
        200:OK,文档正确返回。
        302:Redirect,重定向,即到其它地方去获取资源。
        404:Not Found,没找到,即无法找到这个资源。
        伴随着每个数字状态码,HTTP还会发送一条解释性的“原因短语”文本。包含文本短语主要是为了进行描述,所有的处理过程使用的都是数字码。
3、Web页面中可以包含多个对象
        应用程序完成一项任务时通常会发布多个HTTP事务,比如:Web浏览器会发起一系列HTTP事务来获取并显示一个包含了丰富图片的Web页面。浏览器会执行一个事务来获取描述页面的HTML“框架”,然后发起另外的HTTP事务来获取每个嵌入式图片、图像,面板、Java小程序等,这些嵌入式资源甚至可能位于不同的服务器上,如图6所示。因此,一个“Web页面”通常并不是单个资源,而是一组资源的集合。

图6 复合Web页面要为每个嵌入式资源使用一个单独的HTTP事务
        
四、报文
        HTTP报文是由一行行的简单字符串组成的,HTTP报文都是纯文本,不是二进制代码,便于人工读写,下图显示了一个简单事务所使用的HTTP报文:

图7 由一行行的简单文本结构组成的HTTP报文
        从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其它类型的HTTP报文,HTTP报文包括如下三部分:
        (1)起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
        (2)首部字段:起始行后面有0个或多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号:来分隔。首部以一个空行结束,添加一个首部字段和添加新行一样简单。
        (3)主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

五、连接
        HTTP是应用层协议,用于构建HTTP报文,报文则通过TCP连接来传输,这样HTTP无需关心网络通信细节,而把这些细节交给通用/可靠的TCP/IP协议。
        URL可以使用机器的IP地址,但一般使用域名或主机名,并采用DNS解析出IP地址。
        HTTP默认端口号是80,但也可以指定端口号。
        有了IP地址和端口号后,客户端就可以建立TCP连接了。
        下图显示了浏览器是怎样通过HTTP显示位于远端服务器中的某个简单HTML资源的:

图8 基本的浏览器连接处理
        上图中处理流程如下:
        (1)浏览器从URL中解析出服务器的主机名。
        (2)浏览器将服务器的主机名转换成服务器的IP地址。
        (3)浏览器将端口号(如果有的话)从URL中解析出来。
        (4)浏览器建立一条与Web服务器的TCP连接。
        (5)浏览器向服务器发送一条HTTP请求报文。
        (6)服务器向浏览器回送一条HTTP响应报文。
        (7)关闭连接,浏览器显示文档。

六、协议版本
        目前仍在使用的版本如下:
        (1)HTTP/0.9:HTTP的1991原型版本,只支持GET方法。
        (2)HTTP/1.0:第一个得到广泛使用的HTTP版本,添加了版本号、各种HTTP首部、一些额外的方法、以及对多媒体对象的处理。
        (3)HTTP/1.0+:非官方非正式的HTTP扩展版本,添加了各种特性,包括持久的keep-alive连接、虚拟主机支持、代理连接支持等。
        (4)HTTP/1.1:当然使用的HTTP版本,重点关注的是校正HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性。
        (5)HTTP-NG:又名HTTP/2.0,是HTTP/1.1后继结构的原型建议,重点关注的是性能的大幅优化,以及更强大的服务逻辑远程执行框架。

七、Web的结构组件
1、代理
        代理是位于客户端和服务器之间的HTTP中间实体,是Web安全、应用集成以及性能优化的重要组成模块。

图9 在客户端和服务器之间转发流量的代理
        代理接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。
        出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用,代理还可以对请求和响应进行过滤。
2、缓存
        Web缓存(Web cache)或代理缓存(proxy cache)是一种特殊结构的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来,下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。

图10 保存常用文档本地副本以提高性能的代理缓存
3、网关
        网关(gateway)是一种特殊的服务器,作为其它服务器的中间实体使用。通常用于将HTTP流量转换成其它的协议。
        比如:一个HTTP/FTP网关会通过HTTP请求接收对FTP URI的请求,但通过FTP协议来获取文档,得到的文档会被封装成一条HTTP报文,发送给客户端。

图11 HTTP/FTP网关
4、隧道
        隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的特殊代理。
        HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。HTTP隧道一种常见用途是通过HTTP连接承载加密的安全套接字层(SSL, Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。比如:HTTP/SSL隧道收到一条HTTP请求,要求建立一条道目的地址和端口的输出连接,然后在HTTP信道上通过隧道传输加密的SSL流量,这样就可以将其盲转发到目的服务器上去了。

图12 隧道可以在非HTTP网络上转发数据(显示的是HTTP/SSL隧道)
5、Agent代理
        用户Agent代理是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理,比如:Web浏览器、网络蜘蛛(spiders)或Web机器人(Web robots)等,网络蜘蛛会在Web上闲逛,搜集信息以构建有效的Web内容档案(比如:一个搜索引擎的数据库或为比较购物机器人生成的产品目录)。

图13 自动搜索引擎”网络蜘蛛“就是Agent代理,可以从世界范围内获取Web页面


阅读(835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~