1-HTTP概述

Web 浏览器、服务器和相关的Web 应用程序都是通过HTTP 相互通信的。HTTP 是现代全球因特网中使用的公共语言。

一、HTTP-因特网的多媒体信使

    每天,都有数以亿万计的JPEG 图片、HTML 页面、文本文件、MPEG 电影、WAV音频文件、Java 小程序和其他资源在因特网上游弋。HTTP 可以从遍布全世界的Web 服务器上将这些信息块迅速、便捷、可靠地搬移到人们桌面上的Web 浏览器上去。        HTTP 使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。

二、Web客户端和服务端

    Web 内容都是存储在Web 服务器上的。Web 服务器所使用的是HTTP 协议,因此经常会被称为HTTP 服务器。这些HTTP 服务器存储了因特网中的数据,如果HTTP 客户端发出请求的话,它们会提供数据。客户端向服务器发送HTTP 请求,服务器会在HTTP 响应中回送所请求的数据。

    可能你每天都在使用HTTP 客户端。最常见的客户端就是Web 浏览器,比如微软的Internet Explorer 或网景的Navigator。Web 浏览器向服务器请求HTTP 对象,并将这些对象显示在你的屏幕上。

三、资源

    Web 服务器是Web 资源(Web resource)的宿主。Web 资源是Web 内容的源头。最简单的Web 资源就是Web 服务器文件系统中的静态文件。这些文件可以包含任意内容:文本文件、HTML 文件、微软的Word 文件、Adobe 的Acrobat 文件、JPEG 图片文件、AVI 电影文件,或所有其他你能够想到的格式。但资源不一定非得是静态文件。资源还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容。它们可以为你显示照相机中活生生的照片,也可以帮你进行股票交易,搜索房产数据库,或者从在线商店中购买礼物

    1、媒体类型

    因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过Web 传输的对象都打上了名为MIME 类型(MIME type) 的数据格式标签。

    MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
        • HTML 格式的文本文档由 text/html 类型来标记。
        • 普通的 ASCII 文本文档由 text/plain 类型来标记。
        • JPEG 格式的图片为 image/jpeg 类型。
        • GIF 格式的图片为 image/gif 类型。
        • Apple 的 QuickTime 电影为 video/quicktime 类型。
        • 微软的 PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型。

    2、URI

    每个Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。

    3、URL

    统一资源定位符(URL)是资源标识符最常见的形式。URL 描述了一台特定服务器上某资源的特定位置。

    大部分URL 都遵循一种标准格式,这种格式包含三个部分。
        • URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP 协议(http://)。
        • 第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
        • 其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。

    4、URN   

    URI 的第二种形式就是统一资源名(URN)。URN 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。

四、事务

    一个HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。

    1、方法

    HTTP 支持几种不同的请求命令,这些命令被称为HTTP 方法(HTTP method)。每条HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个Web 页面、运行一个网关程序、删除一个文件等)。

HTTP方法                                           描       述
GET 从服务器向客户端发送命名资源
PUT 将来自客户端的数据存储到一个命名的服务器资源中去
DELETE 从服务器中删除命名资源
POST 将客户端数据发送到一个服务器网关应用程序
HEAD 仅发送命名资源响应中的HTTP 首部

    2、状态码

 每条HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。

显示了几种常见的状态码。

HTTP状态码 描述
200 OK。文档正确返回
302 Redirect(重定向)。到其他地方去获取资源
404 Not Found(没找到)。无法找到这个资源

    3、Web页面可以包含多个对象

应用程序完成一项任务时通常会发布多个HTTP 事务。比如,Web 浏览器会发布一系列HTTP 事务来获取并显示一个包含了丰富图片的Web 页面。浏览器会执行一个事务来获取描述页面布局的HTML“框架”,然后发布另外的HTTP 事务来获取每个嵌入式图片、图像面板、Java 小程序等。这些嵌入式资源甚至可能位于不同的服务器上。因此,一个“Web 页面”通常并不是单个资源,而是一组资源的集合。

五、报文

HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。

从Web 客户端发往Web 服务器的HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP 报文。

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

六、连接

我们来讨论一下报文是如何通过传输控制协议(Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方去的。

    1、TCP/IP

HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。

TCP 提供了:

• 无差错的数据传输;

• 按序传输(数据总是会按照发送的顺序到达);

• 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。

因特网自身就是基于TCP/IP 的,TCP/IP 是全世界的计算机和网络设备常用的层次化分组交换网络协议集。TCP/IP 隐藏了各种网络和硬件的特点及弱点,使各种类型的计算机和网络都能够进行可靠的通信。只要建立了TCP 连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序了。

用网络术语来说,HTTP 协议位于TCP 的上层。HTTP 使用TCP 来传输其报文数
据。与之类似,TCP 则位于IP 的上层。

    2、连接、IP地址及端口号

在HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP 连接。建立一条TCP 连接的过程与给公司办公室的某个人打电话的过程类似。首先,要拨打公司的电话号码。这样就能进入正确的机构了。其次,拨打要联系的那个人的分机号。

在TCP 中,你需要知道服务器的IP 地址,以及与服务器上运行的特定软件相关的TCP 端口号。

怎么获得HTTP 服务器的IP 地址和端口号呢?当然是通过URL了!我们前面曾提到过,URL 就是资源的地址,所以自然能够为我们提供存储资源的机器的IP 地址。我们来看几个URL:

http://207.200.83.29:80/index.html

http://www.netscape.com:80/index.html

http://www.netscape.com/index.html

第一个URL 使用了机器的IP 地址,207.200.83.29 以及端口号80。

第二个URL 没有使用数字形式的IP 地址,它使用的是文本形式的域名,或者称为主机名(www.netscape.com)。主机名就是IP 地址比较人性化的别称。可以通过一种称为域名服务(Domain Name Service,DNS)的机制方便地将主机名转换为IP地址,这样所有问题就都解决了。第2 章会介绍更多有关DNS 和URL 的内容。

最后一个URL 没有端口号。HTTP 的URL 中没有端口号时,可以假设默认端口号是80。

浏览器是怎样通过HTTP 显示位于远端服务器中的某个简单HTML 资源的。

步骤如下:

(a) 浏览器从URL 中解析出服务器的主机名;

(b) 浏览器将服务器的主机名转换成服务器的IP 地址;

(c) 浏览器将端口号(如果有的话)从URL 中解析出来;

(d) 浏览器建立一条与Web 服务器的TCP 连接;

(e) 浏览器向服务器发送一条HTTP 请求报文;

(f) 服务器向浏览器回送一条HTTP 响应报文;

(g) 关闭连接,浏览器显示文档。

    3、Telnet

由于HTTP 使用了TCP/IP 传输协议,而且它是基于文本的,没有使用那些难以理解的二进制格式,因此很容易直接与Web 服务器进行对话。

Telnet 程序可以将键盘连接到某个目标TCP 端口,并将此TCP 端口的输出回送到显示屏上。Telnet 常用于远程终端会话,但它几乎可以连接所有的TCP 服务器,包括HTTP 服务器。

可以通过Telnet 程序直接与Web 服务器进行对话。通过Telnet 可以打开一条到某台机器上某个端口的TCP 连接,然后直接向那个端口输入一些字符。Web 服务器会将Telnet 程序作为一个Web 客户端来处理,所有回送给TCP 连接的数据都会显示在屏幕上。

七、协议版本

现在使用的HTTP 协议有几个版本。HTTP 应用程序要尽量强健地处理各种不同的HTTP 协议变体。

八、Web的结构组件

    1、代理

首先我们来看看HTTP 代理服务器,这是Web 安全、应用集成以及性能优化的重要组成模块。

如图所示,代理位于客户端和服务器之间,接收所有客户端的HTTP 请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。

    2、缓存

Web 缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP 代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。

    3、网关

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。

例如,一个HTTP/FTP 网关会通过HTTP 请求接收对FTP URI 的请求,但通过FTP协议来获取文档。得到的文档会被封装成一条HTTP 报文,发送给客户端。

    4、隧道

隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP 应用程序。HTTP 隧道通常用来在一条或多条HTTP 连接上转发非HTTP 数据,转发时不会窥探数据。

HTTP 隧道的一种常见用途是通过HTTP 连接承载加密的安全套接字层(SSL,Secure Sockets Layer)流量,这样SSL 流量就可以穿过只允许Web 流量通过的防火墙了。

    5、Agent代理

用户Agent 代理(或者简称为Agent 代理)是代表用户发起HTTP 请求的客户端程序。所有发布Web 请求的应用程序都是HTTP Agent 代理。到目前为止,我们只提到过一种HTTP Agent 代理:Web 浏览器,但用户Agent 代理还有很多其他类型。比如,有些自己会在Web 上闲逛的自动用户Agent 代理,可以在无人监视的情况下发布HTTP 事务并获取内容。这些自动代理的名字通常都很生动,比如“网络蜘蛛”(spiders)或者“Web 机器人”(Web robots)。

 

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