http协议进阶(一)HTTP概述
参考书籍——《HTTP权威指南》
1、web客户端和服务器
http客户端发出请求,其中包含请求内容,发给服务器,服务器再返回内容中回送请求的数据,http客户端和服务器构成了万维网的基本组件
我们常说的客户端,就是web浏览器,比如微软的IE、Google的chrome,火狐的Firefox等,浏览器向服务器发送http请求对象,并将对象显示在你的屏幕上
2、资源
web服务器是web资源的宿主,源头;最简单的web资源就是服务器文件系统中的静态文件,其中可能包含很多内容:文本文件、HTML文件、word文件、图片文件、Adobe的acrobat文件等
但资源不局限于静态文件,它还可以根据需要生成软件程序(比如照相机中活生生的照片、股票交易、房产交易的数据库、在线商店中的礼物等等)
总之,所有类型的内容都来源于资源。。。
2.1 媒体类型
互联网上有数千种不同的数据类型,http给每种需要通过http传输的对象都打上了MIME类型(MIME type)的数据格式标签
MIME:多用途英特网邮件扩展
web浏览器每次从服务器取回一个对象时,会先查看其MIME类型,看看能否处理该类型;大多数浏览器都可以处理数百种常见的对象类型
MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔,例如
HTML格式的文本文档:text/html
普通的ASCII文本文档:text/plain
图片类型:image/jpeg、image/gif
2.2 URI
每个服务器资源都有一个名字,这样客户端就可以说明它对什么资源感兴趣
服务器资源名称被称为:统一资源标识符(Uniform Resource Identifier,URI)
URI就像因特网上的邮政地址一样,在世界范围内唯一标识并且定位信息资源
2.3 URL
URL:统一资源定位符是资源最常见的形式,它描述了一台特定服务器上某资源的特定资源,明确说明了如何从一个精确、固定的位置获取资源
上图的URL说明了协议、服务器和本地资源
大部分URL遵循一种标准格式,该格式包含三个部分:
第一部分:方案;说明了访问资源所使用的协议类型,通常为http协议:hhtp://
第二部分:地址;比如:www.baidu.com
第三部分:指定服务器上某个资源,比如:specisal/saw-blade.gif
2.4 URN
URI的第二种方式就是URN:统一资源名;URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关,使用URN,可以将资源四处转移,还可用同一个名字通过多种网络协议来访问资源
URN还处于试验阶段,因为其有效的工作需要一个支撑架构来解析资源的位置。而此类架构比较缺乏,后面详解介绍
3、事务
一个事务由一条请求命令和一条响应结果构成,这种通信时通过http报文(HTTP message)的格式化数据块进行的
事务也可以理解为从客户端到服务器再到客户端,一次完整通信的过程
3.1方法
http支持八种不同的请求命令,被称为方法,每条请求报文都包含一个方法,告诉服务器要执行什么动作,之前有专门介绍过这几种方法;
传送门:http://www.cnblogs.com/imyalost/p/5630940.html
3.2状态码
每条响应报文都会携带一个状态码,用以告知客户端,请求结果,或是否需要其他动作,之前也有介绍过这几种状态码;
传送门:http://www.cnblogs.com/imyalost/p/5688169.html
3.3一个web界面中可以包含多个对象
通常并不是单个资源,而是一组资源的集合(一个事务获得一种资源,不同的资源【甚至分布在不同服务器上】组合构成一个界面)
4、报文
构成:一行行简单的字符串组成
特点:纯文本,方便读写
请求报文(request message):从客户端发往服务器
响应报文(response message):从服务器发往客户端
http报文包括以下三个部分:
起始行:报文第一行,用来说明要做什么,出现了什么情况
首部字段:位于起始行后面,有零个或者多个,每个首部字段都包含一个名字和一个值,便于解析,之间用冒号(:)隔开,以一个空行结束
主体:空行下面为报文主体,其中包含了所有类型的数据
5、连接协议
5.1 TCP/IP
http协议是位于整个数据传输通信的最上层应用层协议,不关注细节,负责通信细节的协议为传输层控制协议(Transmission Control Protocl,TCP)
TCP特点:1)无差错的数据传输
2)按序传输(按照数据发送顺序到达服务器)
3)未分段的数据流(任意时刻任何大小将数据发出去)
英特网是全世界计算机和网络设备最常用的层次化分组交换网络协议集,其隐藏了网络和硬件的特点和弱点,使各类型的计算机和网络都能进行可靠的通信
下面是互联网协议的五层协议栈
5.2 连接、IP地址及端口号
客户端向服务器发送请求报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接通道
URL是资源的地址,自然能够为我们提供储存资源的机器的地址,看下面几个URL:
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
第一个使用了机器的IP地址207.200.83.29,以及端口号80
第二个使用了文本形式的域名(主机名:IP地址比较人性化的别称)。通过域名服务(Domain Name Service,DNS)机制对主机名进行转换,后面详细介绍这一部分
第三个没有端口号,这种情况一般默认端口号为80。
下图为浏览器通过http显示服务器中某个简单HTML资源的流程导图
步骤如下:
1)浏览器从URL中解析出服务器主机名;
2)浏览器将主机名转换为服务器的IP地址;
3)浏览器将端口号(如果有)从URL中解析出来;
4)浏览器建立一条与服务器的连接TCP连接通道;
5)浏览器向服务器发送一条http请求报文;
6)服务器向浏览器发送一条http响应报文;
7)结束通信,关闭连接,浏览器显示具体资源;
说到这里,我很想写写关于数据通信时候所谓的“三次握手”,但之前的http协议基础中已经介绍过,还不懂的可以去里面找找,其实就是数据的封装
6、协议版本
目前我们使用的http协议版本是http1.1,其重点关注的是校正http设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性
HTTP-NG(http2.0):是http1.1后继结构的原型建议,重点关注性能的大幅优化,以及更强大的服务逻辑远程执行框架
目前http2.0还在不断商议中,可能被应用到的新技术预计有以下7种,不排除有重大更改的可能性
7、web的结构组件
web的应用程序,除了浏览器和服务器之外,还有其他几个很重要的组件(以前的博客中有介绍,所以这里就大致说下,后面具体解释他们的功能用处)
7.1 代理:位于客户端和服务器之间的http中间实体
web安全、应用集成以及性能优化的重要组成模块
出于通信安全考虑,会将代理做为转发所有web数据流的可信任中间节点使用,还可对请求响应进行过滤,后面详细介绍
7.2 缓存:http仓库,使常用页面资源可以保存在离客户端更近的地方
web缓存或者代理缓存,可以将经过代理传送的常用的允许缓存的资源保存下来,下一个请求若有相同的资源,可直接享受该资源
http对缓存定义了很多功能,使缓存更高效,并规范了缓存资源的有效期和隐私性,后面详细介绍
7.3 网关:连接其他应用程序的特殊web服务器
网关通常将http数据流转换成其他的协议,接受请求时就好像自己是资源的源服务器,例如
一个http/ftp网关会http请求接受对ftp-URL的请求,但通过ftp协议来获取资源,得到的资源被封装成一条http报文,发送给客户端
关于具体的网关的内容,后面详细介绍
7.4 隧道:对http通信报文进行盲转发的特殊http应用程序
隧道常用的方式是通过http连接承载加密的安全套接层(Secure Scokets Layer,SSL)数据流,这样SSL数据流可以穿过只允许web数据流通过的防火墙
隧道可以在非http网络上转发数据(显示的是HTTP/SSL隧道)
7.5 Agent代理:代表用户发起自动http请求的半智能web客户端程序
其他类型:对web上闲逛的自动用户采用Agent代理,无人监视下发布http事务并获取内容,比如:“网络蜘蛛”、“网络机器人”等
自动搜索引擎“网络蜘蛛”就是Agent代理,可以全世界范围内获取web页面