美文网首页
第一章:http概述

第一章:http概述

作者: 闫鹏飞写字的地方 | 来源:发表于2021-09-13 11:19 被阅读0次
    image.png
    网盘地址:
    https://pan.baidu.com/s/1Iks1nknxUbJ8F-LcN_eVSQ image.png image.png

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)

    1.1HTTP--因特网的多媒体信使

    每天,都有数以亿万计的JPEG图片、HTML页面、文本文件、MPEG电影、WAV
    音频文件、Java小程序和其他资源在因特网上游弋。HTTP可以从遍布全世界的
    Web服务器上将这些信息块迅速、便捷、可靠地搬移到人们桌面上的Web浏览器
    上去。
    HTTP使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够
    确保数据在传输的过程中不会被损坏或产生混乱。这样,用户在访问信息时就不用
    担心其完整性了,因此对用户来说,这是件好事。而对因特网应用程序开发人员来
    说也同样如此,因为这样就无需担心HTTP通信会在传输过程中被破坏、复制或产
    生畸变了。开发人员可以专注于应用程序特有细节的编写,而不用考虑因特网中存
    在的--些觖陷和问题。
    下面,就让我们来近距离地观察一下HTTP是如何传输Web流量的。

    1.2web客户端和服务端

    Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。这些HTTP服务器存储了因特网中的数据,如果HTTP客户端发出请求的话,它们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据,如图1-1所示。HTTP客户端和HTTP服务器共同构成了万维网的基本组件。

    image.png
    可能你每天都在使用HTTP客户端。最常见的客户端就是Web浏览器,比如微软的
    InternetExplorer或网景的Navigator。Web浏览器向服务器请求HTTP对象,并将
    这些对象显示在你的屏幕上。
    浏览一个页面时(比如http://www oreilly.com/index.html),浏览器会向服务器
    www.oreilly.com发送一条HTTP请求(参见图1-1)。服务器会去寻找所期望的对
    象(在这个例子中就是/index.html),如果成功,就将对象、对象类型、对象长度以
    及其他一些信息放在HTTP响应中发送给客户端。.
    1.3

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

    image.png

    总之,所有类型的内容来源都是资源。包含公司销售预测电子表格的文件是一-种资
    源。扫描本地公共图书馆书架的Web网关是--种资源。因特网搜索引擎也是一种
    资源。

    1.3.1 媒体类型

    因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对
    象都打上了名为MIME类型(MIMEtype)的数据格式标签。最初设计MIME
    (Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同
    的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常
    好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。
    Web服务器会为所有HTTP对象数据附加一个MIME类型(参见图1-3)。当Web
    浏览器从服务器中取回一一个对象时,会去查看相关的MIME类型,看看它是否知道
    应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型:显示图
    片文件、解析并格式化HTML文件、通过计算机声卡播放音频文件,或者运行外部
    插件软件来处理特殊格式的数据。


    image.png

    MIME类型是- -种文本标记,表示- -种主要的对象类型和一一个特定的子类型,中间
    由一条斜杠来分隔。
    ●HTML格式的文本文档由text /html类型来标记。
    ●普通的ASCII文本文档由text/plain类型来标记。
    ●JPEG版本的图片为image/jpeg类型。
    ●GIF格式的图片为image/gif类型。
    ●Apple的QuickTime电影为video/ QuickTime类型。
    ●微软的PowerPoint演示文件为app1 ication/vnd . ms -powerpoint类型。
    常见的MIME类型有数百个,实验性或用途有限的MIME类型则更多。附录D提
    供了一个非常完整的MIME类型列表。

    1.3.2 URI

    每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是
    什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI)。
    URI就像因特网上的邮政地址- -样,在世界范围内唯- -标识并定位信息资源。
    这是Joe的五金商店的Web服务器_上一个图片资源的URI:
    http://www. joes-hardware.com/specials/saw-blade.gif
    图1-4显示了URI是怎样指示HTTP协议去访问Joe商店服务器上的图片资源的。
    给定了URI, HTTP就可以解析出对象。URI有两种形式,分别称为URL和URN。
    现在我们分别来看看这些资源标识符类型。

    1.3.3 URL

    统一资源定位符(URL)是资源标识符最常见的形式。URL描述了一台特定服务器
    上某资源的特定位置。它们可以明确说明如何从一一个精确、固定的位置获取资源。
    图1-4显示了URL如何精确地说明某资源的位置以及如何去访问它。表1-1显示了
    几个URL实例。


    image.png image.png

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

    1.3.4 URN

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

    比如,不论因特网标准文档RFC 2141位于何处(甚至可以将其复制到多个地方),
    都可以用下列URN来命名它:
    urn:ietf:rfc:2 141
    URN仍然处于试验阶段,还未大范围使用。为了更有效地工作,URN需要-一个支,
    撑架构来解析资源的位置。而此类架构的缺乏也延缓了其被采用的进度。但URN
    确实为未来发展作出了一-些令人兴奋的承诺。我们将在第2章较为详细地讨论
    URN,而本书的其余部分讨论的基本上都是URL。
    除非特殊说明,否则本书的其余部分都会使用约定的术语,并且会不加区别地使用
    URI和URL。

    1.4 事务

    我们来更仔细地看看客户端是怎样通过HTTP与Web服务器及其资源进行事务处理
    的。一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器
    发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)
    的格式化数据块进行的,如图1-5所示。


    image.png
    1.4.1 方法

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


    image.png

    我们会在第3章详细讨论HTTP方法。

    1.4.2 状态码

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


    image.png

    HTTP软件处理下列状态码和原因短语的方式是一样的。

    200 OK
    200 Document at tached
    200 Succesg
    200 All's cool, dude
    

    第3章详细解释了HTTP状态码。,

    1.4.3 Web页面中可以包含多个对象

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


    image.png
    1.5 报文

    现在我们来快速浏览一下HTTP请求和响应报文的结构。第3章会深入研究HTTP
    报文。
    HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进
    制代码,所以人们可以很方便地对其进行读写。图1-7显示了一一个简单事务所使用
    的HTTP报文。

    image.png

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

    简单的报文实例

    图1-8显示了可能会作为某个简单事务的一部分发送的HTTP报文。浏览器请求资
    http://www joes-hardware.com/tools.html
    在图1-8中,浏览器发送了一条HTTP请求报文。这条请求的起始行中有一个GET
    命令,且本地资源为/tools.html。这条请求说明它使用的是1.0版的HTTP协议。请
    求报文没有主体,因为从服务器上GET一个简单的文档不需要请求数据。
    服务器会回送一条HTTP响应报文。这条响应中包含了HTTP的版本号(HTTP/1.0).
    一个 成功状态码(200)、一个描述性的原因短语(OK), 以及一块响应首部字
    段,在所有这些内容之后跟着包含了所请求文档的响应主体。Content - Length
    首部说明了响应主体的长度,Content -Type首部说明了文档的MIME类型。

    image.png
    1. 6 连接

    概要介绍了HTTP报文的构成之后,我们来讨论一- 下报文是如何通过传输控制协议
    (Transmission Control Protocol, TCP)连接从一个地方搬移到另-一个地方去的。

    1.6.1 TCP/IP

    HTTP是个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都
    交给了通用、可靠的因特网传输协议TCP/IP。
    TCP提供了:
    HTTP概述| 13
    ●无差错的数据传输 ;
    ●按序传输(数据总是会按照发送的顺序到达) ;
    ●未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
    因特网自身就是基于TCP/IP的,TCP/IP是全世界的计算机和网络设备常用的层次
    化分组交换网络协议集。TCP/IP隐藏了各种网络和硬件的特点及弱点,使各种类型
    的计算机和网络都能够进行可靠地通信。
    只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,
    也不会在接收时出现错序了。
    用网络术语来说,HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数
    据。与之类似,TCP则位于IP的上层(参见图1-9)。


    image.png
    1.6.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。
    有了IP地址和端口号,客户端就可以很方便地通过TCP/IP进行通信了。图1-10显
    示了浏览器是怎样通过HTTP显示位于远端服务器中的某个简单HTML资源的。

    image.png

    步骤如下:
    (a)浏览器从URL中解析出服务器的主机名;
    (b)浏览器将服务器的主机名转换成服务器的IP地址;
    (c)浏览器将端口号(如果有的话)从URL中解析出来,
    (d)浏览器建立- -条与Web服务器的TCP连接;
    (e)浏览器向服务器发送一条HTTP请求报文:
    (f)服务器向浏览器回送-一条HTTP响应报文;
    (g)关闭连接,浏览器显示文档。

    1.6.3 使用Telnet实例

    由于HTTP使用了TCP/IP传输协议,而且它是基于文本的,没有使用那些难以理
    解的二进制格式,因此很容易直接与Web服务器进行对话。
    Telnet程序可以将键盘连接到某个目标TCP端口,并将此TCP端口的输出回送到
    显示屏上。Telnet常用于远程终端会话,但它几乎可以连接所有的TCP服务器,包
    括HTTP服务器。
    可以通过Telnet程序直接与Web服务器进行对话。通过Telnet可以打开一条到
    某台机器上某个端口的TCP连接,然后直接向那个端口输入一些字符。Web服务
    器会将Telnet程序作为一个Web客户端来处理,所有回送给TCP连接的数据都
    会显示在屏幕上。.
    我们用Telnet与一个实际的Web服务器进行交互。我们要用Telnet获取URL
    http://www.joes- -hardware.com:80/tools.html所指向的文档(你可以自己尝试一下这
    个实例)。
    我们来看看会发生什么情况。
    ●首先,查找www .joes-hardware.com的IP地址,打开- -条到那台机器端口80的
    TCP连接。Telnet 会为我们完成那些“跑腿儿” 的工作。
    ●一旦打开了TCP连接,就要输入HTTP请求了。
    ●请求结束(由一个空行表示)之后,服务器会在一条HTTP响应中将内容回送并
    关闭连接。
    例1-1显示了对http://www joes -hardware.com:80/tools.html的HTTP请求实例。我
    们输入的内容用粗体字表示。

    image.png

    Telnet会查找主机名并打开- -条连接,连接到在www .joes-hardware.com的端口80
    上监听的Web服务器。这条命令之后的三行内容是Telnet的输出,告诉我们它已经
    建立了连接。
    然后我们输入最基本的请求命令GET/too1s.html HTTP/1.1, 发送-一个提供了源.
    端主机名的Host首部,后面跟上-一个空行,请求从服务器www.joes-hardware.com
    上获取资源tools.html。随后,服务器会以一一个响应行、几个响应首部、一个空行和
    最后面的HTML文档主体来应答。
    要明确的是,Telnet 可以很好地模拟HTTP客户端,但不能作为服务器使用。而且
    对Telnet做脚本自动化是很繁琐乏味的。如果想要更灵活的工具,可以去看看nc
    (netcat)。通过nc可以很方便地操纵基于UDP和TCP的流量(包括HTTP),还可
    以为其编写脚本。更多细节参见http://www.bgw .org/tutorials/utilities/nc.php.

    1.7 协议版本

    现在使用的HTTP协议有几个版本。HTTP应用程序要尽量强健地处理各种不同的
    HTTP协议变体。目前仍在使用的版本如下。
    ●HTTP/0.9
    HTTP的1991原型版本称为HTTP/0.9。这个协议有很多严重的设计缺陷,只应
    该用于与老客户端的交互。HTTP/0.9 只支持GET方法,不支持多媒体内容的
    MIME类型、各种HTTP首部,或者版本号。HTTP/0.9 定义的初衷是为了获取
    简单的HTML对象,它很快就被HTTP/1.0取代了。
    ●HTTP/1.0
    1.0是第一个得到广泛使用的HTTP版本。HTTP/1.0添加了版本号、各种HTTP
    首部、一些额外的方法,以及对多媒体对象的处理。HTTP/1.0使得包含生动图
    片的Web页面和交互式表格成为可能,而这些页面和表格促使万维网为人们广
    泛地接受。这个规范从未得到良好地说明。在这个HTTP协议的商业演进和学术
    研究都在快速进行的时代,它集合了- -系列的最佳实践。
    ●HTTP/1.0+
    在20世纪90年代中叶,很多流行的Web客户端和服务器都在飞快地向HTTP
    中添加各种特性,以满足快速扩张且在商业上十分成功的万维网的需要。其中很
    多特性,包括持久的keep alive连接、虚拟主机支持,以及代理连接支持都被加
    入到HTTP之中,并成为非官方的事实标准。这种非正式的HTTP扩展版本通常
    称为HTTP/1.0+。
    ●HTTP/1.1
    HTTP/1.1重点关注的是校正HTTP设计中的结构性缺陷,明确语义,引入重要
    的性能优化措施,并删除- - 些不好的特性。HTTP/1.1 还包含了对20世纪90年
    代末正在发展中的更复杂的Web应用程序和部署方式的支持。HTTP/1.1是当前
    使用的HTTP版本。
    ●HTTP-NG (又名HTTP/2.0)
    HTTP-NG是HTTP/1.1后继结构的原型建议,它重点关注的是性能的大幅优化,
    以及更强大的服务逻辑远程执行框架。HTTP-NG 的研究工作终止于1998年,编
    写本书时,还没有任何要用此建议取代HTTP/1.1的推广计划。更多信息请参见
    第10章。

    1.8 Web的结构组件

    在本章的概述中,我们重点介绍了两个Web应用程序(Web浏览器和Web服务器)
    是如何相互发送报文来实现基本事务处理的。在因特网上,要与很多Web应用程序
    进行交互。在本节中,我们将列出其他一些比较重要的应用程序,如下所示。
    ●代理
    位于客户端和服务器之间的HTTP中间实体。
    ●缓存
    HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。

    网关
    连接其他应用程序的特殊Web服务器。
    ●隧道
    对HTTP通信报文进行盲转发的特殊代理。
    ●Agent代理
    发起自动HTTP请求的半智能Web客户端。

    1.8.1 代理

    首先我们来看看HTTP代理服务器,这是Web安全、应用集成以及性能优化的重要
    组成模块。
    如图1-11所示,代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并
    将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应
    用程序就是一个代理,代表用户访问服务器。



    出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用。代理
    还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,
    或者对小学生屏蔽一些成人才能看的内容。我们将在第6章详细介绍代理。

    1.8.2 缓存

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

    image.png

    客户端从附近的缓存下载文档会比从远程Web服务器下载快得多。HTTP定义了很
    多功能,使得缓存更加高效,并规范了文档的新鲜度和缓存内容的隐私性。第7章
    介绍了缓存技术。

    1.8.3 网关

    网关(gateway) 是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于
    将HTTP流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器

    • -样。客户端可能并不知道自己正在与一个网关进行通信。
      例如,一个HTTP/FTP网关会通过HTTP请求接收对FTP URI的请求,但通过FTP
      协议来获取文档(参见图1-13)。得到的文档会被封装成-条HTTP报文,发送给
      客户端。第8章将探讨网关。


      image.png
    1.8.4 隧道

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


    image.png
    1.8.4 隧道

    隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的
    HTTP应用程序。HTTP隧道通常用来在- -条或多条HTTP连接上转发非HTTP数
    据,转发时不会窥探数据。
    HTTP隧道的- -种常见用途是通过HTTP连接承载加密的安全套接字层(SSL,
    SecureSocketsLayer)流量,这样SSL流量就可以穿过只允许Web流量通过的防
    火墙了。如图1-14所示,HTTP/SSL隧道收到- -条HTTP请求,要求建立- -条到目
    的地址和端口的输出连接,然后在HTTP信道上通过隧道传输加密的SSL流量,这
    样就可以将其盲转发到目的服务器上去了。


    image.png
    1.8.5 Agent代理

    用户Agent 代理(或者简称为Agent代理)是代表用户发起HTTP请求的客户端程
    序。所有发布Web请求的应用程序都是HTTPAgent代理。到目前为止,我们只提
    到过一-种HTTP Agent代理: Web浏览器,但用户Agent代理还有很多其他类型。
    比如,有些自己会在Web上闲逛的自动用户Agent代理,可以在无人监视的情况下
    发布HTTP事务并获取内容。这些自动代理的名字通常都很生动,比如“网络蜘蛛”
    (spiders)或者“Web 机器人”(Web robots) (参 见图1-15)。网络蜘蛛会在Web上
    闲逛,搜集信息以构建有效的Web内容档案,比如一个搜索引擎的数据库或者为比
    较购物机器人生成的产品目录。更多信息请参见第9章。


    image.png

    相关文章

      网友评论

          本文标题:第一章:http概述

          本文链接:https://www.haomeiwen.com/subject/jvwxgltx.html