第一章 HTTP概述
第一张主要介绍了一下内容:
- Web 客户端与服务器是如何通信的
- (表示 Web 内容的)资源来自何方
- Web 事务是怎样工作的
- HTTP 通信所使用的报文格式
- 底层 TCP 网络传输
- 不同的 HTTP 协议变体
- 因特网上安装的大量 HTTP 架构组件中的一部分
1.1 HTTP——因特网的多媒体信使
HTTP 可以从遍布全世界的 Web 服务器上将JPEG 图片、HTML 页面、文本文件、MPEG 电影、 音频文件和其他资源块迅速、便捷、可靠地搬移到人们桌面上的 Web 浏览器 上去。
HTTP使用的是可靠的数据传输协议,它能够确保数据在传输过程中不被损坏或者产生混乱
1.2 Web客户端和服务器
客户端向服务器发送 HTTP 请求, 服务器会在 HTTP 响应中回送所请求的数据,如图 1-1 所示。HTTP 客户端和 HTTP 服务器共同构成了万维网的基本组件。
1.3 资源
Web 服务器是 Web 资源的宿主。Web 资源是 Web 内容的源头
最简单的 Web 资源就是 Web 服务器文件系统中的静态文件,包括文本文件、HTML 文件JPEG 图片文件、AVI 电影文件,或所有其他你能够想到的格式
资源还可以是根据需要生成内容的软件程序,它 们可以为你显示照相机中活生生的照片,也可以帮你进行股票交易,搜索房产数据 库,或者从在线商店中购买礼物
总之,所有类型的内容来源都是资源
1.3.1 媒体类型
其实就是一种数据类型标记,用来告诉接收端,接收到的数据是什么类型,让接收端知道怎么才能处理该文件!常见标记方式就是MIME,MIME描述了文件的主要类型以及特定子类型,例如:"Content-Type":"text/html"
MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间 由一条斜杠来分隔。
* HTML 格式的文本文档由 text/html 类型来标记。
* 普通的 ASCII 文本文档由 text/plain 类型来标记。
* JPEG 格式的图片为 image/jpeg 类型。
* GIF 格式的图片为 image/gif 类型。
1.3.2 URI
服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。 URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。例如
http://www.joes-hardware.com/specials/saw-blade.gif
URI 有两种形式,分别称为 URL 和 URN
1.3.3 URL
统一资源定位符(URL)是资源标识符最常见的形式。URL 描述了一台特定服务器 上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
-
URL 的第一部分被称为方案,说明了访问资源所使用的协议类型。这部分通常就是 HTTP 协议(http://)。
-
第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
-
其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。 现在,几乎所有的 URI 都是 URL。
1.3.4 URN
URI 的第二种形式就是统一资源名(URN),URN 是作为特定内容的唯一名称使用 的,与目前的资源所在地无关。
URN 仍然处于试验阶段,还未大范围使用
1.4 事务
一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器 发回客户端的)响应结果组成,事务通信的格式是http报文
1.4.1 方法
常见的HTTP方法
- GET---------请求指定的页面信息,并返回实体主体
- POST--------向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
- PUT---------从客户端向服务器传送的数据取代指定的文档的内容
- DELETE------请求服务器删除指定的页面
- HEAD--------类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
1.4.2 状态码
每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码, 告知客户端请求是否成功,或者是否需要采取其他动作,下面是常见的状态码
- 200--------- 响应成功
- 302--------- 重定向,到其他地方去获取资源
- 404--------- 无法找到资源
1.4.3 Web页面中可以包含多个对象
Web 浏览器会发布一 系列 HTTP 事务来获取并显示一个包含了丰富图片的 Web 页面。
浏览器会执行一个 事务来获取描述页面布局的 HTML“框架”,然后发布另外的 HTTP 事务来获取每 个嵌入式图片、图像面板、Java 小程序等。
这些嵌入式资源甚至可能位于不同的服务器上,如图 1-6 所示。因此,一个“Web 页面”通常并不是单个资源,而是一组 资源的集合。
1.5 报文
HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进制代码,如下图所示
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message);从 服务器发往客户端的报文称为响应报文(response message)。HTTP 请求和响应报文的格式很类似。
HTTP 报文包括以下三个部分。
-
起始行-------报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
-
首部字段-----起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,两者之间用冒号(:)来分隔。首部以一个空行结束。
-
主体----------空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据; 响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同, 主体中可以包含任意 的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。