HTTP概述(一)
1、HTTP
HTTP是现代全球因特网中使用的公共语言。Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。HTTP使用的是可靠的数据传输协议。
2、Web客户端和服务器
Web内容都是存储在服务器上的。Web服务器所使用的是HTTP协议,由此经常会被称为HTTP服务器。
这些HTTP服务器存储了因特网中的数据,如果HTTP客户端发出请求的话,它们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中会送所请求的数据,如图所示。
最常见的客户端就是Web浏览器。其原理就是Web浏览器向服务器请求HTTP对象,并将这些对象显示在你的屏幕上。
3、资源
Web服务器就是Web资源的宿主。Web资源时Web内容的源头。
所有能提供Web内容的东西都是Web资源。
3.1、媒体类型
因特网上有数千种不同的数据类型,HTTP仔细地给每一种要通过Web传输的对象都打上名为MIME type 的数据格式标签,以此解决在不同的电子邮件系统之间搬移报文时存在的问题。
就拿Web服务器来说,Web服务器会为所有HTTP对象数据附上一个MIME类型。当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象。
MIME类型如下:
HTML格式的文本文档由 text/html 类型来标记
普通的ASCII文本文档由 text/plain 类型来标记
JPEG格式的图片为 image/jpeg 类型
GIF格式的图片为 image/gif 类型
Apple 的QuickTime 电影为 video/quicktime 类型
微软的PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型
3.2、URI
每个Web服务器资源都有一个名字,服务器资源名被称为统一资源标识符
,简称URI
.URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
3.3、URL
统一资源定位符(URL)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
大部分URL都遵循一种标准格式,这种格式包含三个部分。
1、URL的第一部分被称为方案,说明了访问资源所使用的协议类型。这部分通常就是HTTP协议,即(http://)。
2、第二部分给出了服务器的因特网地址(比如:www.baidu.com)。
2、其余部分指定了Web服务器上的某个资源(比如:/specials/saw-blade.gif).
现在几乎所有URI都是URL。
3.4、URN
URI的第二种形式就是统一资源名(URN)
。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。目前URN仍然处于试验阶段。
4、事务
我们来看看客户端是怎么通过HTTP与Web服务器及其资源进行事务处理的:
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)的格式化数据进行的。
4.1、方法
HTTP支持几种不同的请求命令,这些命令被称为HTTP方法。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个Web页面,运行一个网关程序,删除一个文件等等)。
常见的五种方法如下:
1. GET: 从服务器向客户端发送命名资源
2. PUT: 将来自客户端的数据存储到一个命名的服务器资源中去
3. DELETE: 从服务器中删除命名资源
4. POST: 将客户端数据发送到一个服务器网关应用程序
5. HEAD: 仅发送命名资源响应中的HTTP首部
4.2、状态码
每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
常见的几种状态码如下:
200: OK,文档正确返回
302: Redirect(重定向)。到其他地方去获取资源
404: Not Found(没找到)。无法找到这个资源
5、报文
HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。如图所示:
从Web客户端发往Web服务器的HTTP报文称为请求报文
。从服务器发往客户端的报文称为响应报文
,此外没有其他类型的HTTP报文。
HTTP报文包括以下三个部分:
起始行:
报文的第一行就是起始行,在请求报文中用来说明要做些什么;在响应报文中说明出现了什么状况。
首部字段:
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,用冒号分隔。首部以一个空行结束。
主体:
空行后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给web服务器的数据;响应主体中装载了要返回给客户端的数据。主体中可以包含任意的二进制数据(比如图片,视频,音轨,软件程序)。当然也包含文本。
6、连接
接下来我们就来讨论下报文是如何通过传输控制协议(TCP)连接从一个地方搬移到另一个地方去的。
6.1、TCP/IP
HTTP是个应用层协议,所以它无需操心网络通信的具体细节,至于要把细节交给TCP/IP就可以了。
TCP的特点:
1.无差错的数据传输
2.按顺序传输(数据按顺序到达)
3.数据流未分段(可以任意时刻以任意尺寸将数据发送出去)
TCP/IP隐藏了各种网络和硬件的特点和弱点,使各种类型的计算机和网络都能进行可靠的通信。
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失,不会被破坏,也就不会再接收的时候出现错序了。
用网络术语来说,HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据。与之类似,TCP则位于IP的上层,如下图:
6.2、连接、IP地址及端口号
在HTTP客户端向服务器发送报文之前,需要用网际协议(IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。所以说,在TCP中,要想进行连接,就需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。IP地址,端口号,一般在我们的URL中,也就是资源地地址中,都可以看得到。
接下来,我们就从下图分析一下一个基本的浏览器连接处理:
步骤如下:
a.浏览器从URL中解析出服务器的主机名;
b.浏览器将服务器的主机名转换成服务器的IP地址;
c.浏览器的端口号从URL中解析出来;
d.浏览器建立一条与Web服务器的TCP连接;
e.浏览器向服务器发送一条HTTP请求报文;
f.服务器向服务器会送一条HTTP相应报文;
g.关闭连接,浏览器显示文档。
7.协议版本
现在使用的HTTP协议有几个版本:
- HTTP/0.9
- HTTP/1.0
- HTTP/1.0+
- HTTP/1.1
- HTTP1.2
8.Web的结构组件
除了Web浏览器和Web服务器,还有其他一些比较重要的应用程序,如下所示:
-
代理:
位于客户端和服务端之间的HTTP中间实体 -
缓存:
HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方 -
网关:
连接其他应用程序的特殊Web服务器 -
隧道:
对HTTP通信报文进行盲目转发的特殊处理 -
Agent代理:
发起自动HTTP请求的半智能Web客户端
8.1、代理
首先我们来看看HTTP代理服务器。代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来收,这些应用程序就是一个代理,代表用户访问服务器。
出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如在企业中对下载的应用程序进行病毒检测。