HTTP 概述

HTTP - 因特网的多媒体信使

HTTP 使用的是可靠的数据传输协议,能够保证数据在传输过程中不会被损坏或产生混乱。

Web客户端和服务器

Web 内容都是存在 Web 服务器上,Web 服务器使用的是 HTTP 协议,因此也称为 HTTP 服务器。

HTTP 客户端,例如浏览器向 HTTP 服务器发送请求,服务器在 HTTP 响应中会送所请求的数据。

资源

Web 服务器是 Web 资源的宿主。Web 资源是 Web 内容的源头。

资源可以是静态文件,如:文本文件、HTML文件、word文件、JPEG文件、AVI文件等等。也可以是根据需要生成内容的软件程序。

媒体类型

HTTP 为因特网上数千种不同的数据类型都打上了名为 MIME 类型(MIME type)的数据格式标签。

Web 服务器会为所有 HTTP 对象数据附加一个 MIME 类型。Web 客户端从服务器取回一个对象时会查看相关的 MIME 类型以决定如何处理这个对象。

MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一个斜杠分割。

  • text/html:HTML 格式的文本文档
  • text/plain:普通的 ASCII 文本文档
  • image/jpeg:JPEG 格式的图片
  • image/gif:GIF 格式的图片
  • video/quicktime:Apple 的 QuickTime 电影
  • application/vnd.ms-powerpoint:微软的 PowerPoint 演示文件
  • ….

URI

每个 Web 服务器资源都有一个名字,称为 统一资源标识符。 URI 有两种形式:URL 和 URN。

URL

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

URL 基本都遵循一种标准格式,即由三部分组成:

  • 第一部分:方案,说明了资源使用的协议类型,通常是 HTTP 协议(http://)。
  • 第二部分:服务器的因特网地址,比如:www.joes.com 。
  • 第三部分:其余部分指定了 Web 服务器上的某个资源,比如:/pictures/image.gif 。

现在几乎所有的 URI 都是 URL。

URN

URI 的第二种形式是统一资源名,即 URN。作为特定内容的唯一名称使用,与目前的资源所在地无关。无论这个资源位于何处,都可以使用多种协议,仅通过名字就能访问该资源。

事务

一个 HTTP 事务由一条请求命令和一个响应结果组成。这种通信是通过名为 HTTP 报文的格式化数据块进行的。

方法

HTTP 支持集中不同的请求命令,这些命令被称为 HTTP 方法,该方法告诉服务器要执行什么动作。

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

状态码

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

伴随每个状态码,还会有一条原因短语,对状态码进行描述。

报文

HTTP 报文有多行简单的字符串组成。都是纯文本。对应请求和响应分为请求报文响应报文

HTTP 报文的三个部分:

  • 起始行:即报文第一行,在请求报文中说明要做什么,在响应报文中说明出现了什么情况;
  • 首部字段:起始行后面有零个或多个首部字段。每个首部字段包含一个名字和一个值,使用冒号分割。以一个空行结束;
  • 主体:空行之后就是可选的报文主体,包含了所有类型的数据。起始行与首部字段都是结构化的文本,而主体中可以包含任意的二进制数据,或者文本。

连接

TCP/IP

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

TCP提供了:

  1. 无差错的数据传输;
  2. 按序传输,数据总是按照顺序到达;
  3. 为分段的数据流,可以在任意时刻以任意尺寸将数据发送出去。

连接、IP地址及端口号

HTTP 客户端需要使用**网际协议(Internet Protocol, IP)**地址和端口号在客户端和服务器之间建立一条TCP连接。

Web的结构组件

  • 代理:位于客户端和服务器之间的 HTTP 中间实体;
  • 缓存:HTTP 的仓库,使常用页面的副本能够保存在离客户端更近的地方;
  • 网关:连接其他应用程序的特殊 Web 服务器;
  • 隧道:对 HTTP 通信报文进行盲转发的特殊代理;
  • Agent 代理:发起自动 HTTP 请求的半智能 Web 客户端。