HTTP The Definitive Guide 1: Overview of HTTP

导读:本篇文章讲解 HTTP The Definitive Guide 1: Overview of HTTP,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

web浏览器、服务器及web应用都通过HTTP(Hypertext Transfer Protocol)即超文本传输协议相互交流。HTTP是现代全球英特网的公共语言。

这里将通过了解web应用是如何通过HTTP进行通信的,来对HTTP的工作有个大概印象。这里将介绍以下内容:

  1. web客户端与服务器是如何交流的
  2. web内容资源来自哪里
  3. web事务如何运作
  4. 用于HTTP通信所使用的消息格式
  5. 底层TCP网络的传输
  6. HTTP协议的不同变式
  7. 一些英特网上安装的HTTP体系结构组件

1 . HTTP: The Internet’s Multimedia Courier

每天,因特网中都穿梭着百十亿的 JPEG 图片,HTML页面,文本文件,MPEG电影,WAV文件,Java应用,以及其他资源。HTTP快速、方便、可靠地将成批的信息从遍布全球的web服务器搬运到桌面上的web浏览器中。

因为HTTP使用可靠地数据传输协议,它保证你的数据在传输中不会被破坏,即使它来自地球的另一端。这对用户来说是非常棒了,因为你不必担心数据的完整性问题。可靠地传输对因特网应用开发者也是件好事,因为你不必担心 HTTP通信在传输中被破坏、被重复或者被扭曲,这使得开发人员可以对应用细节进行编程,而不用担心因特网的缺陷。

2 . Web Clients and Servers

web内容存在于web服务器。web服务器使用HTTP协议,所以也可以将它们成为HTTP服务器。这些服务器存储了因特网数据并且能够在 HTTP 客户端提出请求后提供数据:
在这里插入图片描述
这些客户端和服务器共同组成万维网的基础内容。

你可能每天都在使用HTTP客户端。最常见的HTTP客户端这是web浏览器,它们从服务器上请求HTTP对象并将它们展示你的屏幕上。
例如你要浏览一个网页,浏览器就会向服务器发送一个HTTP请求,然后服务器会查找所需要的对象,如果查到成功的话,服务器会在HTTP响应中将这个对象发送给浏览器,这个响应中还包含了对象的类型、长度以及其他信息。

3 . Resources

web服务器是web resources宿主机。web资源是web内容的源头。位于服务器文件系统中的静态资源就是一种简单的web资源类型。这些资源能够包含任何你能想到的格式。

然而这些资源不必非得是静态文件。它们还可以使根据需求生成内容的软件程序。这些动态内容资源能根据你的身份、所请求的信息或时间来生成内容。它们能够展示你相机里的照片、让你进行股票交易、在线购物等:
在这里插入图片描述
总之,资源是所有内容的来源。

3.1 Media Types

因为因特网有成千上万种不同的数据类型,HTTP就为每一种要在网络中传输的对象打上一个称为MIME(Multipurpose Internet Mail Extensions)的数据格式标签。HTTP用它来描述并标记多媒体内容。

服务器会对所有HTTP数据对象附加一个MIME类型。当然浏览器从服务器获取一个返回的对象时,它会查看该对象关联的MIME类型确定以它是否能处理这个对象。大多数浏览器能够处理成百上千种常见的对象类型。
在这里插入图片描述

3.2 URIs

每个服务器资源都有一个名字,所以浏览器只需要指出它们感兴趣的那一个。这个名字又叫统一资源标识符URI(uniform resource identifier)。URIs就像邮编地址一样,唯一标识并定位世界中的信息资源。比如:

https://www.joeshardwareonline.com/v/vspfiles/assets/images/Hippo%20Painting%202%20resized.png

URI有两种形式,分别称为URLURN

3.3 URLs

统一资源标识符最常见的就是统一资源定位符URL(uniform resource locator)

URLs描述了特定服务器上某个资源的具体位置,它确切地告诉你如何从精确的固定位置获取资源:
在这里插入图片描述
在这里插入图片描述
大部分URL都遵循一种包含三个部分的标准格式:
在这里插入图片描述
如今,几乎所有URI都是一个URL。

3.4 URNs

第二种类型是统一资源名URN(uniform resource name),它用作特定资源的唯一名称,与资源当前所在的位置无关。

这些与地址无关的URNs允许资源从一处移向另一处,还可以用同一个名字通过多种网络访问协议来访问资源。例如,可以用urn:ietf:rfc:2141来命名因特网标准文档RFC 2141,而不论它存储在哪里。

为了更高效地工作,URNs需要一个支持基础来解析资源位置。

4 . Transactions

现在来看看客户端如何使用HTTP与服务器及其资源进行交互的细节。

HTTP事务Transactions由一个请求命令(从客户端发送到服务器)和一个响应结果(从服务器发送回到客户端)组成。这种通信发生在称为HTTP消息的格式化数据块中。如下所示:
在这里插入图片描述

4.1 Methods

HTTP支持几种不同的请求命令,它们被叫做HTTP方法Methods。每一个请求消息都有一个方法,该方法告诉服务器要执行什么操作(获取网页,运行网关程序,删除文件等)。下面是五种常用的HTTP方法:

HTTP方法 描述
GET Send named resource from the server to the client
POST Send client data into a server gateway application.
PUT Store data from client into a named server resource.
DELETE Delete the named resource from a server.
HEAD Send just the HTTP headers from the response for the named resource.

我们会在后面讨论这些方法。

4.2 Status Codes

每一个HTTP响应都携带一个状态码Status Code,状态码是一个告诉客户端请求是否成功、是否有其他动作需要采取的三位数字码。比如:
HTTP The Definitive Guide 1: Overview of HTTP
如上所示,每条状态码都伴随一个解释性的原因短语。

我们会在后面讨论这些状态码。

4.3 Web Pages Can Consist of Multiple Objects

应用程序经常发出多个HTTP事务来完成任务。比如,Web浏览器会发出一系列HTTP事务以获取并显示图形丰富的Web页面,过程大概是浏览器执行一次事务以获取描述页面布局的HTML“框架”,然后为每个嵌入式图像、Java applet等发出其他HTTP事务。因此,一个web页面是一系列资源的集合而不是单个资源。
在这里插入图片描述

5 . Messages

这里先快速浏览一下HTTP请求与响应的消息报文Messages结构。

HTTP消息报文很简单,它由一行行字符串构成,因为它是纯文本而不是二进制数据,所以有利于开发人员读写。一个例子如下:
在这里插入图片描述
HTTP也就只有如上图所示的两种消息报文,而且它们的格式还很象。HTTP消息报文由以下三部分组成:

Parts Description
Start line 消息报文第一行。表明请求要做什么、响应中发生了什么
Header fields 紧跟在Start line之后。其中包含了多个易解析的键值对,它以一个空行结束
Body 空行之后是包含任何类型数据的可选消息正文。 请求主体将数据传送到Web服务器; 响应主体将数据传回客户端。 与正文和结构化的起始行和标题不同,主体可以包含任意二进制数据当然,主体也可以包含文本。

下面是一个简单示例:
在这里插入图片描述

6 . Connections

现在,我们已经素描了HTTP消息的外观,下面让我们讨论一下如何通过传输控制协议TCP(Transmission Control Protocol)连接在不同位置移动消息。

6.1 TCP/IP

HTTP是一个应用层协议,它无需担心网络通信中的难以厘清的细节,因为它把所有网络细节的实现都交给了通用且可靠的TCP/IP协议。

TCP提供了:

  1. 无差错数据传输
  2. 数据按序到达(数据总是以发送的顺序到达)
  3. 不分段的数据流(能以任何大小在任何时间将数据传送出去)

英特网本身就基于TCP/IP——一个全世界计算机与网咯设备都通用的传输层分组交换协议簇。TCP/IP隐藏了具体网络与硬件的特征与弱点,使得任何类型的计算机与网络能可靠地通信。

一旦TCP连接被建立起来,客户端与服务器端的消息交换就不会被丢失、被破坏、被乱序接收。

用网络术语来说,HTTP协议位于TCP之上。 HTTP使用TCP传输其消息数据,同样,TCP位于IP之上:
在这里插入图片描述

6.2 Connections, IP Addresses, and Port Numbers

在HTTP客户端发送请求到服务器之前,它需要使用英特网协议IP(Internet protocol)地址与端口号port numbers来建立TCP/IP连接。

建立TCP连接有点像在公司办公室打电话给某人。首先,拨打公司的电话号码。 这将使你进入正确的组织。 然后,拨打要联系的人的特定分机号。

在TCP中,需要服务器计算机的IP地址和与服务器上运行的特定软件程序关联的TCP端口号。

这一切都还好,但首先,如何获取服务器的IP地址与端口号呢?当然是使用URL!我们前面讲过,URLs就是资源地址,所以它们足够能提供资源所在机器的IP地址。一些URLs如下:
在这里插入图片描述
第一个URL包含了IP地址”207.200.83.29″以及端口号”80″。
第二个URL就没有数字IP地址,它只有文本名,或者说是主机名hostname“www.netscape.com”,这是一个对人类有好的IP地址别名。主机名可以通过称为域名服务DNS(Domain Name Service)的功能轻松地转换为IP地址。我们会在后面讨论关于DNS及URLs的更多内容。
最后一个URL连端口号都没有了。当HTTP URL中没有端口号时,可以确定的是它默认使用”80″。

整个过程是这样的:

  1. 浏览器从URL中提取服务器主机名。
  2. 浏览器将这个主机名转换为服务器IP地址。
  3. 浏览器从URL中提取端口号(如果存在的话)。
  4. 浏览器与服务器建立TCP连接。
  5. 浏览器向服务器发送HTTP请求消息。
  6. 服务器向浏览器发送请求响应。
  7. 连接关闭,浏览器展示内容。

在这里插入图片描述

6.3 A Real Example Using Telnet

Telnet实用程序将键盘连接到目标TCP端口,并将TCP端口输出连接回显示屏。Telnet通常用于远程终端会话,但通常可以连接到任何TCP服务器,包括HTTP服务器。

可以使用Telnet实用程序直接与Web服务器通信。 Telnet允许打开与计算机端口的TCP连接,并在该端口中直接键入字符。 Web服务器将您视为Web客户端,并且在TCP连接上发回的所有数据都会显示在屏幕上:
在这里插入图片描述

7 . Protocol Versions

Versions Description
HTTP/0.9 1991年的HTTP原型版本称为HTTP / 0.9。 该协议包含许多严重的设计缺陷,应仅用于与旧版客户端互操作。 HTTP / 0.9仅支持GET方法,并且不支持多媒体内容,HTTP标头或版本号的MIME类型。 HTTP / 0.9最初定义为获取简单的HTML对象。 很快它被HTTP / 1.0取代。
HTTP/1.0 1.0是广泛部署的HTTP的第一个版本(截至2012年)。 HTTP / 1.0添加了版本号,HTTP标头,其他方法和多媒体对象处理。 HTTP / 1.0使支持吸引人的图形化网页和交互形式变得切实可行,这有助于促进万维网的广泛采用。 从来没有很好地指定此规范。 它代表了该协议在商业和学术快速发展时期的最佳实践的集合。
HTTP/1.0+ 在1990年代中期,许多流行的Web客户端和服务器为HTTP快速添加了功能,以满足快速扩展,商业上成功的万维网的需求。 其中许多功能(包括持久的“ keepalive”连接,虚拟主机支持和代理连接支持)已添加到HTTP中,并成为非官方的事实上的标准。 HTTP的这种非正式扩展版本通常称为HTTP / 1.0 +。
HTTP/1.1 HTTP / 1.1专注于纠正HTTP设计中的体系结构缺陷,指定语义,引入重大的性能优化并消除错误功能。 HTTP / 1.1还包括对1990年代后期正在进行的更复杂的Web应用程序和部署的支持。 HTTP / 1.1是HTTP的当前版本(截至2012年)。
HTTP/2.0 HTTP-NG是HTTP / 1.1的体系结构后继者的原型提案,该提议着重于显着的性能优化和用于远程执行服务器逻辑的更强大的框架。 HTTP-NG的研究工作于1998年结束,在撰写本文时,尚无计划推进此提议以替代HTTP / 1.1。HTTP/2.0是HTTP的当前版本

8 . Architectural Components of the Web

在本概述章节中,我们重点介绍了两个Web应用程序(Web浏览器和Web服务器)如何来回发送消息以实现基本事务。这里我们还要列举一些其他重要的程序。

8.1 Proxies

首先看看代理服务器proxy servers吧,这是web安全、应用整合和性能优化的重要组成部分。

代理位于客户端和服务器之间,它接受所有客户端的请求,并且接力给服务器(也许在修改请求之后)。这些应用程序充当用户的代理,代表用户访问服务器。
在这里插入图片描述
代理通常用于安全性,充当所有Web流量流经的受信任中介。 代理还可以过滤请求和响应; 例如,检测公司下载中的应用程序病毒,或过滤成人内容,使其远离小学生。

8.2 Caches

Web缓存 web cache或缓存代理caching proxy是HTTP代理服务器的一种特殊类型,它保留通过代理传递的常用文档的副本。 下一个请求相同文档的客户可以从缓存的个人副本中获得服务。
在这里插入图片描述
与从远程Web服务器相比,客户端从附近的缓存中下载文件的速度可能要快得多。 HTTP定义了许多功能,以使缓存更有效,并调节缓存内容的新鲜度和隐私性。

8.3 Gateways
网关Gateways是特殊的服务器,充当其他服务器的中介。 它们通常用于将HTTP通信转换为其他协议。 网关总是接收请求,就好像它是资源的原始服务器一样。 客户端可能不知道它正在与网关通信。
在这里插入图片描述
例如,HTTP/FTP网关通过HTTP请求接收对FTP URI的请求,但使用FTP协议获取文档。 生成的文档打包到HTTP消息中,然后发送到客户端。

8.4 Tunnels

隧道Tunnels是HTTP应用程序,设置后可在两个连接之间盲目中继原始数据。 HTTP隧道通常用于通过一个或多个HTTP连接传输非HTTP数据,而不查看数据。
在这里插入图片描述

HTTP隧道的一种流行用法是通过HTTP连接传送加密的安全套接字层SSL(Secure Sockets Layer)流量,从而允许SSL流量通过仅允许Web流量的公司防火墙。HTTP / SSL隧道接收HTTP请求以建立到目标地址和端口的传出连接,然后继续在HTTP通道上隧道传输加密的SSL流量,以便可以将其盲目中继到 目标服务器。

8.5 Agents

用户代理User agents(或仅仅是代理Agents)是代表用户发出HTTP请求的客户端程序。 发出Web请求的任何应用程序都是HTTP代理。 到目前为止,我们仅讨论了一种HTTP代理:网络浏览器。 但是,还有许多其他类型的用户代理。
在这里插入图片描述
例如,有一些机器自动化的用户代理,它们可以自动漫游Web,发出HTTP事务和获取内容,而无需人工监督。 这些自动化代理通常具有五颜六色的名称,例如“爬虫“spiders”或“网络机器人web robots”。 蜘蛛在网上徘徊,以建立有用的网络内容档案,例如搜索引擎的数据库或比较购物机器人的产品目录。

The End of the Beginning

这就是我们对HTTP的快速介绍。
在这里:
我们重点介绍了HTTP作为多媒体传输协议的作用。
我们概述了HTTP如何使用URI来命名远程服务器上的多媒体资源。
概述了HTTP请求和响应消息如何用于操纵远程服务器上的多媒体资源,并通过调用一些使用HTTP的Web应用程序来完成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98119.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!