1.1 Web客户端和服务器
HTTP 客户端和 HTTP 服务器共同构成了万维网的基本组件,客户端向服务器发送 HTTP 请求, 服务器会在 HTTP 响应中回送所请求的数据。
示意图:
1.2 媒体类型
因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过 Web 传输的对象都打上了名为MIME类型(Multipurpose Internet Mail Extension type)的数据格式标签。
在Header中经常看见:
Content-type: image/jpeg Content-length: 12984
其中的image/jpeg就表示MIME类型。
几种常见的MIME类型:
-
HTML 格式的文本文档由 text/html 类型来标记。
-
普通的ASCII文本文档由text/plain类型来标记。
-
JPEG 格式的图片为 image/jpeg 类型。
-
GIF 格式的图片为 image/gif 类型。
-
Apple 的 QuickTime 电影为 video/quicktime 类型。
-
微软的PowerPoint演示文件为application/vnd.ms-powerpoint类型。
1.3 URI 统一资源标识符(Uniform Resource Identifier)
- URI 就像因特网上的邮箱地址一样,在世界范围内唯一标识并定位信息资源。
- URI 有两种形式,分别称为 URL 和 URN。
统一资源定位符(URL)
URL 描述了一台特定服务器上某资源的特定位置。
协议、服务器和本地资源示意图:
大部分 URL 都遵循一种标准格式,这种格式包含三个部分:
- URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这 部分通常就是 HTTP 协议(http://)。
- 第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
- 其余部分指定了Web服务器上的某个资源(比如,/specials/saw-blade.gif)。
统一资源名(URN)
URN 是作为特定内容的唯一名称使用 的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬 移。通过 URN,还可以用同一个名字通过多种网络访问协议来访问资源。
URN 仍然处于试验阶段,还未大范围使用。
1.4事务
一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器 发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message) 的格式化数据块进行的:
1.4.1 方法
HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每 条 HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取 一个 Web 页面、运行一个网关程序、删除一个文件等)。
常见的集中方法:
HTTP方法 |
描 述 |
GET | 从服务器向客户端发送命名资源 |
PUT | 将来自客户端的数据存储到一个命名的服务器资源中去 DELETE 从服务器中删除命名资源 |
POST | 将客户端数据发送到一个服务器网关应用程序 |
HEAD | 仅发送命名资源响应中的 HTTP 首部 |
1.4.2 状态码
每条 HTTP 响应报文返回时都会携带一个状态码,比如200。
1.5 报文
HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进 制代码,所以人们可以很方便地对其进行读写。 示例:
两种不同的报文:
- 从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。
- 从 服务器发往客户端的报文称为响应报文(response message) 。
HTTP 报文包括以下三个部分。
- 起始行 报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段 起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,用冒号(:)来分隔。首部以一个空行结束。
- 主体 包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。
![](https://images2017.cnblogs.com/blog/1226731/201709/1226731-20170929211510106-492561351.png)
1.6 TCP/IP
• 无差错的数据传输;
• 数据总是会按照发送的顺序到达;
• 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
![](https://images2017.cnblogs.com/blog/1226731/201710/1226731-20171018205006365-731224562.png)
在使用HTTP客户端发送报文之前,需要使用IP(Internet Protocol)协议通过地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
IP地址和端口号是通过URL来获取的:
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
![](https://images2017.cnblogs.com/blog/1226731/201710/1226731-20171018205948068-272894239.png)
给大家介绍一下,这是浏览器的处理过程,@XXX
(a) 浏览器从 URL 中解析出服务器的主机名;
(b) 浏览器将服务器的主机名转换成服务器的 IP 地址;
(c) 浏览器将端口号(如果有的话)从 URL 中解析出来;
(d) 浏览器建立一条与 Web 服务器的 TCP 连接;
(e) 浏览器向服务器发送一条 HTTP 请求报文;
(f) 服务器向浏览器回送一条 HTTP 响应报文;
(g) 关闭连接,浏览器显示文档。
1.7 HTTP协议版本
-
HTTP/0.9
HTTP/1.0
HTTP/1.0+
HTTP/1.1
HTTP-NG(又名 HTTP/2.0)
1.8 Web组件
• 代理
位于客户端和服务器之间的 HTTP 中间实体。接收客户端的HTTP请求并转发给服务器,转发给服务器之前可能会对请求进行修改哦,这样做的一个应用就是对请求进行过滤,或者对下载的应用程序进行病毒检测,再就是为了保障下一代的身心健康,过滤一些非法的内容,你懂得~。
• 缓存
HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方。这样做的好处就是加快了客户端请求的响应速度,毕竟缓存一般在离客户端比较近的地方,但是呢,应该有响应的机制能够保证缓存中的内容和服务器中的内容应该时刻保持一致,否则会出现问题的。。。
• 网关
连接其他应用程序的特殊 Web 服务器。通常用来将HTTP转换成其他的协议。使用网关的时候网关强行假装自己是客户端要访问的资源服务器,所以,网恋有风险啊。。。
• 隧道
对 HTTP 通信报文进行盲转发的特殊代理。隧道一旦建立,连接之间就可以对原始的数据进行盲转发,注意是原始数据哦~
• Agent 代理
发起自动 HTTP 请求的半智能 Web 客户端。代理代理,就是代表用户发起HTTP请求的客户端程序。最常用的一种,基本都用过的:Web浏览器,惊不惊喜~ 还有各种爬虫等。