HTTP协议详解

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等),是Web的核心。HTTP协议由两部分程序实现:客户程序和服务程序,两者通过HTTP报文会话。

HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


HTTP请求报文格式:


HTTP 请求报文的第一行 叫做请求行 (request line) ,其后继的行叫做首部行( header line) 。 

请求行有 3 个字段:方法字段、 URL 字段和 HTTP 版本字段。 方法宇段可以取几种 不同的值,包括 GET、 POST、 HEAD、 PUT 和 DELETE。绝大部分的 HTTP 请求报文使用 GET 方法。 当浏览器请求一个对象时,使用 GET 方法,在 URL 字段带有请求对象的标识。 在本例中,该浏览器正在请求对象/somedirl page. html。 其版本字段是自解释的;在本例 中,浏览辑实现的是 HTTP/l. 1 版本。 

首部行 Host: www. someschool. edu 指明了对象所在的主机。

 User-agent: 用来 指明用户代理,即向服务器发送请求的浏览器的类型。 这里浏览器类型是 Mozilla/5. 0 , 即 Firefox 浏览器。 

ConnecLion: 用来选择开启或者关闭TCP持续连接,这里close表示关闭。

 Accept-language : 表示用户想得到该对象的语言版本。


HTTP报文字段的通用格式如下:



HTTP响应报文格式:



 它有三个部分:一个初始状态行 (sLatus line) , 6 个 首部行 (header 1ine) ,然后是实体体 (enLity body) 。 

实体体部分是报文的主要部分,即它 包含了所请求的对象本身(表示为 dala dala data data... ) 。 

状态行有 3 个字段:协议版本 宇段、状态码和相应状态信息。 在这个例子中,状态行指示服务器正在使用 HTTP/l. 1, 并且一切正常。

首部行:Connection: close 首部行告诉客户,发送完报文后 将关闭该 TCP 连接

 Date: 响应报文产生的日期和时间

 Server: 首部行指示该报文 是由一台 Apache Web 服务器产生的.它类似于 HTTP 请求报文中的 User-agent

Last- Moclified: 首部行指示了对象创建或者最后修改的日期和时间。 

Conlenl-Length: 首部行指示了被发送对象中的字节数

 Conlent-Type: 首部行指示了实体体中的对象是 HTML文本


持久连接和非持久连接:

每个请求 /响应对是经一个单独的 TCP 连接发送,该应用程序被称为使用非持续连接( non- persistent connection) ;

所有的请求及其响应经相同的 TCP 连接发送,采用前一种方法采 用后一种方法,该应用程序被称为使用持续连接( persistent connection) 。 

下面我们举一个例子来比较HTTP的持久连接和非持久连接。

假设我们现在需要访问一个网页,该页面包含1个基本HTML文件和10张jpg图片文件,一共11个对象。

如果采用非持久连接,每个TCP连接只能传输1个请求报文和1个响应报文。那么需要建立11个TCP连接来传输。

如果采用持久连接,一个TCP连接能传输多个请求报文和多个响应报文。那么只需建立1个TCP连接来传输。

两种情况比较,持久连接相对于非持久连接大大减少了TCP连接建立的时间,当页面的对象数目达到一定值时,两者时间差异非常大。

当然,持久连接也是缺点的,由于持久连接的性质,会给服务器带来负担。

浏览器一般默认选择持久连接。

用户与服务器的交互技术:cookie

基于Internet的各种服务系统应运而生,建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的一些信息;在用户浏览网页时,一些信息会自动保存为cookie,存放于浏览器对应目录下。当下一次访问网页时,网站会通过cookie来得到访问者的信息。

Web缓存服务器

Web 缓存器 (Web cache) 也叫代 理服务器 (proxy server) ,它是能够代表初始 Web 服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。 Web 缓存器通常由 ISP 购买并安装。 例如, 一所大学可能在它的校园网上安装一台缓存器,并且将所有校园网上的用户浏览器配置为指向它。 或者,一个主要的住宅 ISP (例 如 AOL) 可能在它的网络上安装一台或多台 Weh 缓存器,并且预先配置其配套的浏览器指向这些缓存器。

Web缓存服务器工作原理如下:

假设浏览器正在请求对象 http://www.someschool. edu/campus.giI,步骤如下:

1.浏览器建立一个到 Web 缓存器的 TCP 连接,并向 Web 缓存器中的对象发送一个 HTTP 请求。

2.Web 缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web 缓存器就向客户浏览器用 HTTP 响应报文返回该对象。 

3.如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器(如 www. someschool. edu) 的 TCP 连接。Web 缓存器则在这个缓存器到服务器的 TCP 连接上发送一个对该对象的 HTTP 请求。 在收到该请求后,初始服务器向该Web 缓存器发送具有该对象的 HT'回响应。 

4.当 Web 缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用盯TP 响应报文发送该副本(通过现有的客户浏览器和Web 缓存器之间的 TCP 连接) 

在internet上部署 Web 缓存器有两个原因。首先,Web 缓存器可以大大减少对客户请求的响应时间,特别是当客户与初始服务器之间的瓶颈带宽远低于客户与 Web 缓存器之 间的瓶颈带宽时更是如此。 如果在客户与 Web 缓存器之间有一个高速连接(情况常常如此) ,并且如果用户所请求的对象在 Web 缓存器上,则 Web 缓存器可以迅速将该对象交付给用户。其次,如我们马上用例子说明的那样,Web 缓存器能够大大减少一个机构的接入 链路到闲特网的通信量。通过减少通信量,该机构(如一家公司或者一所大学)就不必急于增加带宽,因此降低了费用。此外, Web 缓存器能从整体上大大减低因特网上的 Web 流量,从而改善了所有应用的性能。 

条件 GET 方法:

尽管高速缓存能减少用户感受到的响应时间,但也引人了一个新的问题,即存 放在缓存器中的对象副本可能是陈旧的。换句话说,保存在服务器中的对象自该副本缓存在客户上以后可能已经被修改了。幸运的是, HTTP 协议有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件 GET (conditional GET) 方法。 如果:①请求报文使用 GET 方法;并且②请求报文中包 含一个"If-Modified -Since"首部行。那么,这个 HTTP 请求报文就是一个条件GET请求报文。 

条件GET请求包含下面两个特性:使用GET方法;报文中包含一个If-modified-since首部行。其工作流程如下:

  • 【1】缓存器向服务器发送一个请求报文
  • 【2】服务器向缓存器发送具有被请求对象的响应报文,其中包含Last-Modified首部行
  • 【3】缓存器存储该对象同时也存储了Last-Modified中描述的最后修改时间
  • 【4】一段时间过后,客户机向缓存器发送请求报文来请求对象
  • 【5】缓存器接收到客户机的报文之后,向服务器发送一个条件GET方法确认对象是否最新
  • 【6】服务器检查,发送缓存的对象还是最新的之后,向缓存发送一个状态为304(Not Modified)的响应
  • 【7】缓存器接收到响应确认最新之后再将对象发送给客户机
  • 【8】如果服务器检查发现缓存对象不是最新的,则向缓存器发送响应报文同时把最新的对象附在报文的实体主体中传送
  • 【9】缓存器接受响应报文之后更新缓存对象并发送给客户机

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章