首页 理论教育HTTP协议-计算机网络技术

HTTP协议-计算机网络技术

【摘要】:超文本传输协议HTTP 是万维网的核心,是浏览器与服务器之间的通信协议。在浏览器和服务器之间的请求和响应的交互中,必须遵循的规则和格式就是超文本传输协议HTTP。④基于该请求的内容,服务器找到相应的文件,并根据文件的扩展名,形成一个HTTP 回答报文回送给浏览器,服务器释放本次TCP 连接。HTTP1.1 将持续连接作为默认连接。图9.6HTTP 的报文格式开始行用于区分是请求报文还是响应报文。

超文本传输协议HTTP 是万维网的核心,是浏览器与服务器之间的通信协议。每个万维网站点都有一个服务器进程,它不断地监听TCP 的80 端口,以便发现是否有浏览器向它发出连接请求。一旦监听到建立连接的请求并建立TCP 连接后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP 连接就被释放了。在浏览器和服务器之间的请求和响应的交互中,必须遵循的规则和格式就是超文本传输协议HTTP。

从协议功能角度看,HTTP 和TELNET、FTP 等应用程序一样均采用客户/服务器方式工作。因为HTTP 只使用一条TCP 连接,即数据连接,没有控制连接,所以比FTP 简单。

HTTP 报文由HTTP 客户和HTTP 服务器读取和解释,采用立即交付的方式进行通信。客户发给服务器的命令嵌入在请求报文中,而服务器回送的内容或其他信息则嵌入在响应报文中。

(1)HTTP 的操作过程

用户可采用两种方法浏览页面:一种是在浏览器的地址窗口中输入所要寻找页面的URL,另一种是在某个页面上用鼠标单击可链接的地方。这时,浏览器就会自动地在互联网上寻找到所要链接的页面。

当客户发起访问万维网的请求,万维网的基本工作过程如下:

①客户浏览器根据用户输入的URL 或者鼠标单击的“超链”标志,向DNS 查询对应网站的IP 地址。

②浏览器根据DNS 返回的IP 地址,与服务器的熟知端口80 建立TCP 连接。

③浏览器向服务器提交一个HTTP 请求,内含取文件命令:Get/show/index.html。

④基于该请求的内容,服务器找到相应的文件,并根据文件的扩展名,形成一个HTTP 回答报文回送给浏览器,服务器释放本次TCP 连接。

⑤根据HTTP 回答报文首部,浏览器按某种方式显示该文件内容。如果该文件中有超链接,浏览器将随时发出新的请求以获取相关内容。

其中步骤②~步骤④是HTTP 的一次操作,也称为HTTP 的一次事务。在一次事务操作过程中,HTTP 首先要经历三次握手,与服务器建立TCP 连接。而万维网客户的HTTP 请求报文作为三次握手的第三个报文发送给万维网服务器。服务器收到这个请求后,将所有请求的文档作为响应回送给客户。这是一种花费在TCP 连接上的系统开销。

另外,万维网客户和服务器需要为每一次TCP 连接分配缓存和变量,这也是一种系统开销。当服务器为多个客户提供服务时,为每一次TCP 连接分配缓存和变量的方式会造成服务器的负担过重。为了解决这个问题,HTTP1.1 使用了持续连接的概念。所谓持续连接,是指万维网服务器在发送响应后仍在一段时间内保持这条连接,以使同一客户与该服务器可以继续在这条连接上传送后续的HTTP 请求报文和响应报文。只要这些文档来自同一服务器,就不局限于传送同一个页面上链接的文档。HTTP1.1 将持续连接作为默认连接。目前一些浏览器(例如,IE 6.0)的默认设置就是使用HTTP1.1。

持续连接有两种工作方式:非流水线和流水线。非流水线方式是指客户在收到前一个响应报文才能发出下一个请求,这比非持续连接的两倍RTT 的开销节省了建立TCP 连接所需的一个RTT 时间。但服务器在发送完一个对象后,其TCP 连接就处于空闲状态,浪费了服务器资源。流水线方式是指客户在收到HTTP 响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个RTT 时间,使TCP 连接中的空闲时间减少,提高了下载文档效率

(2)HTTP 的报文格式

HTTP 有以下两类报文:请求报文(从客户向服务器发送请求报文)、响应报文(从服务器到客户的回答)。由于HTTP 是面向文本的,在报文中的每一个字段都是ASCII 码串,因而每个字段的长度都是不确定的。

HTTP 请求报文和响应报文都是由三个部分组成,即开始行、首部行和实体主体。HTTP报文格式如图9.6所示。

图9.6 HTTP 的报文格式

开始行用于区分是请求报文还是响应报文。在开始行的三个字段之间都可以用空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。首部行用来说明浏览器、服务器或报文主体的一些信息,可以有几行,也可以不使用。实体主体字段在请求报文中一般不用,在响应报文中也可能没有。请求报文和响应报文的开始行是不同的。

在请求报文中,开始行就是请求行。它由三个内容组成,即方法、请求资源的URL 以及HTTP 的版本。“方法”实质上就是一些命令,决定着请求报文的类型。表9.1 给出了请求报文中常用的几种方法。

表9.1 请求报文中常见的方法

而在响应报文中,开始行是状态行。状态行包括三项内容,即HTTP 的版本、状态码以及解释状态码的简单短语。状态码都是三位数字,分为五大类共33 种,例如:

①1xx 表示通知信息,如请求收到了或正在进行处理。(www.chuimin.cn)

②2xx 表示成功,如接受或知道了。

③3xx 表示重定向,如要完成请求还必须采取进一步的行动。

④4xx 表示客户的差错,如请求中有错误的语法或不能完成。

⑤5xx 表示服务器的差错,如服务器失效无法完成请求。

下面三种状态行在响应报文中是经常见到的:

HTTP/1.1 202 Accepted {接受}

HTTP/1.1 400 Bad Request {错误的请求}

HTTP/1.1 404 Not Found {找不到}

若请求的网页从一个页面转移到了一个新的地址,则响应报文的状态行和一个首部行就是下面的形式:

HTTP/1.1 301 Moved Permanently {永久性地转义了}

Location:http:/ /www.cqu.edu.cn/ttt/index.html {新的URL}

(3)代理服务器

代理服务器又称为万维网高速缓存。它将最近一些请求和响应的副本保存下来。在有代理服务器的情况下,HTTP 客户把请求发送给代理服务器,代理服务器检查它的高速缓存。如果代理服务器发现这个请求与暂存在高速缓存中的请求相同则返回响应,而不需要按URL 的地址再去互联网上访问该资源。如果没有所需的响应,代理服务器就把请求发送给相应的服务器,最终代理服务器获得所需的响应,将它存储在高速缓存中备用,再将响应结果返回给发出这次请求的客户。

代理服务器减少了目标服务器的负担,减少了互联网的通信量,也减少了访问互联网所带来的时延。但是,由于使用了代理服务器,客户必须进行合理的配置才能正确使用。

(4)万维网站点识别用户的功能

HTTP 具有无状态的特点,即服务器不会记住曾经为客户服务的次数。这种无状态特性虽然简化了服务器的设计,但是实际使用中却希望万维网站点具有识别用户的功能。例如,如果用户在万维网站点中已经注册了,则希望下次再访问该站点时站点能够自动识别。为了做到这点,HTTP 使用Cookie 来传递HTTP 服务器与客户之间的状态信息。

Cookie 是指某些站点为了识别用户身份而存储在客户终端上的数据(通常经过加密)。使用、创建和存储Cookie 与具体实现有关,但原理是相同的。其基本过程如下:

①当服务器收到来自客户的请求后,就将有关客户信息存储在一个文件或字符串当中。客户信息包括域名、用户名、注册号、时间戳等。

②服务器在回答的响应报文中包含Cookie 内容。

③当客户收到响应时,浏览器就将Cookie 内容存储到按域名服务器的名字来分类的Cookie 目录中。

于是,当一个客户向服务器发送请求时,客户的浏览器就查找Cookie 目录中是否有那个服务器发送的Cookie。如果有,就将这个Cookie 包含在请求当中。当服务器收到这个请求后,就知道这是一个老客户,否则,就认为是新客户。

在操作过程中,Cookie 的内容并没有被客户所知晓,也不暴露给客户。

这样,万维网上使用Cookie 的站点便能够识别用户。服务器可以在客户首次注册时,向该客户发送一个Cookie,从而达到识别用户的功能。利用Cookie 识别用户的功能,也适合于在电子商店购物中购物车的实现。