HTTP
超文本传送协议(Hyper Text Transfer Protocol)。
一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。它是一种可靠的数据传输协议,能够保证传输的过程中不会被损坏或产生混乱。
Web服务器是如何传输Web资源的?
Web内容都是存储在Web服务器上的。Web服务器使用的是HTTP协议。如果HTTP客户端发出请求的话,他们会提供数据。
eg:浏览网页的时候(如www.baidu.com),浏览器(客户端)会向服务器www.baidu.com发送一条HTTP请求,服务器会去寻找所期望的对象,如果成功,就将对象,对象类型,对象长度及其他信息放在HTTP响应中发送给客户端。就相当于是一次对话。
下图为Web客户端和服务器里面的简要信息
资源
Web服务器是Web资源的宿主。
1.资源类型
因特网上有很多种数据类型,HTTP给每种要求Web传输的对象都打上了名为MIME(多用途因特网邮件扩展)类型的数据格式标签。
MIME类型是一种文本标记,表示一种重要的对象类型和一个特定的子类型,中间由一条斜杠分隔
- HTML格式的文本文档:text/html
- 普通的ASCII文本文档: text/plain类型来标记
- JPEG格式的图片:image/jpeg
- Apple的QuickTime电影:video/quicktime
- 微软的PPT文件: application/vnd.ms-powerpoin
2.资源名称URI: 服务器资源名称被称为统一资源标识符(Uniform Resource Identifier,URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源.如http://www.baidu.com/img/baidu_sylogo1.gif,百度logo。给定URI,HTTP就可以解析出对象。
URI有两种形式,分别是URL和URN。
1)URL(统一资源定位符)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。他们可以明确说明如何从一个精确,固定的位置获取资源。也就是我们平时说的网址。
大部分URL都遵循一种标准格式:
- URL的第一部分被称为方案(scheme),说明了访问资源所使用的类型,这部分通常是HTTP协议(http://)
- 第二部分给出了服务器的因特网地址(eg:www.baidu.com)
- 其余部分指出了服务器上的某个资源(eg: /img/baidu_sylogo1.gif)
现在几乎URI都是URL
2)URN
统一资源名(仍处于试验阶段)
事务
客户端是怎样通过HTTP与Web服务器及其他资源进行事务处理?
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)的格式化数据块进行的。
eg:
1.方法
HTTP提供几种不同的请求命令,这些命令被称为HTTP方法。这个方法告诉服务器要执行什么动作。
5种常见方法
- GET 从服务端向客户端发送命名资源
- PUT 将来自客户端的数据存储到一个命名的服务器资源中去。
- DELETE 从服务器中删除资源
- POST 将客户端数据发送到一个服务器网关应用程序
- HEAD 仅发送命名资源响应中的HTTP首部
2.报文
请求报文和响应报文的结构
HTTP报文是由一行行简单的字符串组成的。都是纯文本,不是二进制
下图显示一个简单事务所使用的HTTP报文
Web客户端发往Web服务器端的HTTP不报文称为请求报文,反之称为响应报文。
报文的三个部分
- 起始行
报文的第一行就是起始行。在请求报文中说明要做些什么,在响应报文中说明出现什么情况
- 首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单
- 主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中转载了要返回给客户端的数据,起始行和首部都是文本形式且都是结构化的,而主体不同,主体中可能包含任何的二进制数据(如图片,视频,音轨,软件程序)。当然主体中也可以包含文本。
状态码
每条HTTP响应报文都会携带一个状态码,告诉客户端请求是否成功,或者是否需要采取其他动作。
常见状态码 HTTP状态码 描述 100 OK 200 Continue 403 Forbidden 404 Not Found 500 Internet Server Error
连接
以上是HTTP报文的构成,报文是通过传输控制协议(Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方。
TCP/IP
HTTP是一个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用,可靠的因特网传输协议TCP/IP。
TCP提供了:
- 无差错的数据传输
- 按序传输(数据总会按照发送的顺序到达)
- 为分段的数据流(可以任意时刻以任意尺寸价格数据送出去)
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失,破坏。
连接,IP地址及端口号
在HTTP客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
在TCP中,需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。通过URL可以知道这些信息。
Eg:http://www.baidu.com:80/index.html
www.baidu.com为主机名,比IP地址人性化、可以通过域名服务(DNS)的机制转换成IP地址,80是端口号(如地址上没有显示,默认为80)
Web的结构组件
除Web浏览器和Web服务器两个应用程序,在因特网上,要与很多Web应用程序进行交互,再来列出一些重要的应用程序。
- 代理
位于客户端和服务器之间的HTTP中间实体;
作用:接受所有客户端的HTTP请求,并将这些请求转发给服务器。
- 缓存
HTTP的仓库,使常用页面的副本可以保存在离科幻段更近的地方
作用:可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。
- 网关
链接其他应用程序的特殊Web服务器
作用:通常将HTTP流量转换成其他的协议
- 隧道
对HTTP通信报文记性盲转换的特殊代理
作用:通过HTTP链接承载加密的安全套接字层(SLL,Security Socket Layer)流量,这样SSL就可以穿过只允许Web流量通过的防火墙了。
- Agency代理
发起自动HTTP请求的半智能Web客户端
作用:有些自己会在Web上闲逛的自动用户Agent代理,可以在无人监视的情况下发布HTTP事务并获取内容。Eg:网络蜘蛛(spider),Web机器人(Web robots)