HTTP是现代全球因特网中使用的公共语言。Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。
本篇简单介绍Web应用程序是如何使用HTTP进行通信的。主要介绍以下内容:
1.Web客户端与服务器是如何通信的;
Web服务器:存储Web内容。
Web客户端:最常见的客户端就是浏览器,如微软的IE,谷歌的Chrome等。
Web服务器使用的是HTTP协议,如果HTTP客户端发出请求的话,他们会提供数据。HTTP客户端和HTTP服务器共同构成了万维网的基本组件。浏览器向服务器请求HTTP对象,并将这些对象显示在你的屏幕上。
如浏览页面http://www.dayidingpei.com/index.html,浏览器会向服务器www.dayidingpei.com 发送一条HTTP请求,服务器去寻找期望的对象/index.html,如果成功就将对象、对象类型、对象长度以及其他一些信息放在HTTP相应中发送给客户端。
2.(表示Web内容的)资源来自何方;
Web服务器是Web资源的宿主。Web资源是Web内容的源头。最简单的Web资源就是Web服务器文件系统中的静态文件。这些文件可以包含任意内容 如文本,html文件,图片、视频文件等。
但资源不一定得是静态文件。资源还可以是根据需要生成内容的软件程序,这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容。总之,所有类型的内容来源都是资源。
2.1媒体类型
因特网上有数千种不同的数据类型,HTTP给每种要通过Web传输的对象都打上了名为MIME类型。Web服务器会为所有会为所有HTTP对象数据附加一个MIME类型。当浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型。MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。如:
- HTML格式的文本文档由 text/html类型来标记
- ASCII文本文档由 text/plain 类型来标记
- JPEG格式的图片为 image/jpeg 类型
- GIF格式的图片为 image/gif 类型
- Apple的QuickTime电影为 video/quicktime 类型。
- 微软的PowerPoint演示文件为 application/vnd.ms-powerpoint 类型
2.2 URI
每个Web服务器资源都有一个名字,这样客户端就可以说明他们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
URI有两种形式 分别为URL和URN。
2.3 URL
统一资源定位符(URL)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。他们可以说明如何从一个精确、固定的位置获取资源。
大部分URL都遵循一种标准格式,这种格式包含三个部分。
- URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP协议(http://)
- 第二部分给出了服务器的因特网地址(如:www.dayidingpei.com)
- 其余部分指定了Web服务器上的某个资源(如:/index.html)
现在几乎所有的URI都是URL
2.4 URN
URI的第二种形式就是统一资源名(URN),URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN还可以用同一个名字通过多种网络访问协议来访问资源。URN仍然处于实验阶段,还未大范围使用。
3.Web事务是如何工作的;
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为报文(HTTP message)的格式化数据块进行的。
3.1 HTTP方法
HTTP支持几种不同的请求命令,这些命令被称为HTTP方法。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个html页面,运行一个网关程序、删除一个文件等)。一下是5中常见的HTTP方法:
- GET 从服务器向客户端发送命令资源
- PUT 将来自客户端的数据存储到一个命令的服务器资源中去
- DELETE 从服务器中删除命令资源
- POST 将客户端数据发送到一个服务器网关应用程序
- HEAD 仅发送命名资源响应中的HTTP首部
3.2 状态码
每条HTTP响应报文返回时都会携带一个状态码。状态码是一个3位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。常见的状态码如下:
- 200 OK。文档正确返回。
- 302 Redirect(重定向)。到其他地方去获取资源。
- 404 Not Found (没找到)。无法找到这个资源。
伴随着每个数字状态码,HTTP还会发送一条解释性的“原因短语”文本,文本短语主要是用来描述,所有的处理过程使用的都是数字码。
3.3 Web页面中可以包含多个对象
4.HTTP通信所使用的报文格式;
HTTP报文是由简单字符串组成,是纯文本不是二进制代码,所以可以很方便地对其读写。从客户端发往服务器的HTTP报文称为请求报文,从服务器发往客户端的报文称为响应报文。此外没有其他类型的报文。HTTP报文包含三个部分:起始行、首部字段、主体。
5.底层TCP网络传输
5.1 TCP/IP
HTTP是个应用层协议,无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。TCP提供了:
- 无差错的数据传输;
- 按顺序传输;
- 未分段的数据流;
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序。
HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据。TCP则位于IP的上层。
5.2 连接、IP地址及端口号
在HTTP客户端向服务器发送报文之前需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
在TCP中,你需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。获取HTTP服务器IP地址和端口号的方式是URL。
基本的浏览器连接处理步骤如下:
- 浏览器从URL中解析出服务器的主机名;
- 浏览器将服务器的主机名转换成服务器的IP地址;
- 浏览器将端口号(如果有的话)从URL中解析出来;
- 浏览器建立一条与Web服务器的TCP连接;
- 浏览器向服务器发送一条HTTP请求报文;
- 服务器向浏览器回送一条HTTP响应报文;
- 关闭连接,浏览器显示文档;
6.不同的HTTP协议变体
目前仍在使用的版本如下:
HTTP/0.9 HTTP的1991原型版本,只支持GET方法,不支持多媒体内容的MIME类型、各种HTTP首部,或者版本号。
HTTP/1.0 添加了版本号、各种HTTP首部、一些额外的方法,以及对多媒体对象的处理。
HTTP/1.0+ 包括持久的keep-alive连接、虚拟主机支持以及代理连接支持
HTTP/1.1 校正HTTP设计中的结构性缺陷,明确语义引入重要的性能优化措施,并删除一些不好的特性。
HTTP-NG (又名HTTP/2.0)性能的大幅优化,以及更强大的服务逻辑远程执行框架。
7.因特网上安装的大量HTTP架构组件中的一部分(Web的结构组件)。
代理:位于客户端和服务器之间的HTTP中间实体。
缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。
网关:连接其他应用程序的特殊Web服务器。
隧道:对HTTP通信报文进行盲转发的特殊代理。
Agent代理:发起自动HTTP请求的半智能Web客户端。