协议系列之HTTP协议

什么是HTTP\HTTPS

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传输协议,它能使浏览器更加高效,使网络传输减少,保证计算机正确快速地传输超文本文档。现在我们普遍使用的版本是HTTP1.1。

HTTP是一个应用层协议,它由请求和响应组成,是一个标准的B/S模型;它也是一个无连接的协议,这里无连接指的是每次连接只处理一个请求,服务器处理完客户端请求后便断开连接;同时,它也是一个无状态的协议,那么什么是无状态呢?简单地说就是同一个客户端,这次请求跟上一次请求是没有对应关系的。

HTTPS简单地说就是HTTP的安全版。通常在安全性要求比较高的网站(例如银行网站)会看到HTTPS,它本质其实也是HTTP协议,只是在HTTP增加了一个TLS或SSL协议层。如图2-2-6-1,如果在TCP协议上加一层TLS或SSL协议,就是HTTPS协议了。TLS\SSL提供了加密的机制,所以它比HTTP明文传输更安全,图中可以看出,HTTP可以直接进入TCP传输层;也可以在TCP层上加一层TLS\SSL层,这样就先经过TLS\SSL再进入TCP传输层。这两种方式便是HTTP与HTTPS。一般HTTP的端口为80,而HTTPS的端口为443。

图2-2-6-1 HTTP协议层

 

简单地说,SSL\TLS协议层主要的职责就是借助下层协议的信道安全地协商出一份加密密钥,并且用此密钥来加密HTTP请求响应报文。它解决了以下三个安全性方面的议题:①提供认证服务,认证本次会话实体身份的合法性。②提供加密服务,强加密机制能保证通信过程中的消息不会被破译。③提供防篡改服务,利用Hash算法对消息进行签名,通过验证签名保证通信内容不被篡改。

HTTPS运用越来越广泛,而且在安全场景中是一个很好的解决方案,一般作为解决安全传输的首选解决方案。那么还是有必要稍微深入了解一下HTTPS的工作原理及流程。

在理解HTTPS工作原理前,先了解一些加密解密算法与Hash算法:(1)对称加密。密钥只有一个,加密解密都是这个密码,加解密速度快,典型的对称加密算法有DES、AES、RC4等。(2)非对称加密。密钥成对出现,分别为公钥跟私钥,公钥无法推知私钥,反之私钥也不能推知公钥。加密解密使用不同密钥,公钥加密需要私钥解密,反之私钥加密需要公钥解密。非对称加密速度较慢,典型的非对称加密算法有RSA、DSA、DSS等。(3)Hash算法,这是一种不可逆的算法,我们常用于验证数据的完整性。

图2-2-6-2详细描述了HTTPS完成一次通信要做哪些事情。首先,由于HTTPS是基于TCP/IP通信的,属于可靠传输,那么必须要先进行3次握手,完成连接建立。接下去的是SSL的握手协议,此协议非常有效的让客户和服务器之间完成相互之间的身份认证。第一步,客户端浏览器向服务器发送SSL\TLS协议的版本号、加密算法的种类、产生的随机数、以及其它需要的各种信息。第二步,服务器从客户端支持的加密算法中选择一组加密算法与Hash算法,并且把自己的证书(包含网站地址、加密公钥、证书颁发机构等)也发送给客户端。第三步,浏览器获取服务器证书后对其合法性进行验证,颁发机构是否合法,证书中的网址是否与正在访问的地址一致,通过验证的浏览器会显示一个小锁头,否则提示证书不受信。第四步,客户端浏览器生成一串随机数并用服务器传来的公钥加密,再使用约定好的Hash算法计算握手消息,发送到服务器端。第五步,服务器接到握手消息后用自己的私钥解密,并用Hash算法验证,这样双方都有了此次通信的密钥。第六步,服务器再使用密钥加密一段握手消息,返回给客户端浏览器。第七步,浏览器用密钥解密,并用hash算法验证,确定算法跟密钥。完成以上七步后双方就可以利用此次协商好的密钥进行通信。

图2-2-6-2 HTTPS的工作原理及流程

 

HTTP请求响应模型

从某种意义上来说,HTTP协议永远都是由客户端发起请求,服务器进行响应,并发送回响应报文。如果没有客户端进行请求或曾经请求,那么服务器端是无法将消息推送到客户端的。http协议采用了请求/响应模型,一个http请求跟响应一般如图2-2-6-3所示,客户端向服务器发送一个请求,请求头包含请求方法、URI、协议版本、请求修饰符、客户信息、类似于MIME结构的消息内容。服务器以一个状态行作为响应,内容包括消息协议版本、成功或失败编码、服务器信息、实体元信息及一些实体内容。这样就完成了一个请求响应过程。

图2-2-6-3 HTTP请求响应模型

 

通常,把一次http操作称为一个事务,而它的工作流程大概可以用以下四点来概括:

  1. 开始工作,客户端浏览器先要与服务器建立连接,即是通过三次握手建立连接。在浏览器上最简单的就是点击一个超级链接,就触发了连接建立。
  2. 连接建立后,客户端浏览器发送一个请求到服务器,这个过程其实是组装请求报文的过程,详细的报文格式与解析会在下节展开。
  3. 服务器端接收到请求报文后,对报文进行解析,组装成一定格式的响应报文,返回给客户端。
  4. 客户端浏览器接收到响应报文后,对其进行解析,并通过浏览器内核,按照一定的外观进行显示,然后与服务器断开连接。

解析HTTP报文

上节我们了解了http请求响应模型,那么具体请求与响应报文格式是怎样的,报文又是怎样被解析的?这节将详细展开讲述。想要深入理解web服务器就必须对http报文熟悉,正所谓练拳先练功,要研究tomcat服务器就要先对http报文有一定的了解。http报文是面向文本的,报文中每个字段都是一些ascii码串,它包括请求报文和响应报文。

首先看看http请求报文,一个http请求由三部分组成:请求行、请求头部、请求体。图2-2-6-4详细展示了一个http请求报文的结构与详细的字段意义。请求行,由请求方法字段、URL字段和http协议版本字段组成,他们用空格分隔;请求头部,包含若干个属性与属性值,他们通过冒号分隔,格式为“属性名:属性值”,服务器据此获取客户端的信息;请求体,一般在POST方法里使用,而不在GET方法中使用。它将表单中得组件格式化成param1=value1&param2=value2键值对组,即用来存放请求参数数据。但有时也用来存放请求URL。

请求方法中GET和POST是最常见的,除此之外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。当我们点击网页链接或在浏览器输入网址访问时,就是用了GET方法,请求参数和值附加在URL后面,用问号隔开,如,/index.jsp?id=10000,用GET方法传递的参数都能在地址栏上看到,大多浏览器对地址的字符长度做了限制,一般最多是1024个字符。所以,要传送大量数据的话,要选择用POST方法。POST方法允许客户端提交更多信息给服务器,它把请求参数封装到请求体中,可以传输大量数据,不会对数据大小进行限制,同时也不在地址栏显示参数。其它方法比较少用,不再展开,可查找相关资料。

请求头部常用的典型属性有以下几种:

  1. User-Agent:客户端请求的浏览器类型,更确切地说是客户端应用程序的名称,不同版本、不同厂商的值都可能不相同。
  2. Accept:告诉服务器客户端可识别的媒体类型列表。这个属性的值可以是一个或多个MIME类型的值,服务器可以根据这个判断发不发送这个媒体类型。
  3. Host:为服务器提供客户端想要访问的那台机器的因特网主机名和端口号。
  4. Cookie:用于传输客户端的cookie到服务器,服务器维护的session就是通过cookie附带的jsessionid值来区分的哪个客户端关联哪个session的。当然,我们还可以通过重写URL的方式将jsessionid附带在URL后面。
  5. Referer:表示这个请求是从哪个URL过来的,可以让服务器知道客户端从哪里获得其请求的RUL。如果在A主页点击一个连接进入主页B,浏览器就会在请求中插入一个带有A的Referer头部。
  6. Cache-Control:通过这个属性可以对缓存进行控制。它是一个缓存指令,指定了对某个对象的可缓存性有关的缓存特有指令。

 

图2-2-6-4 HTTP请求报文

 

接着看HTTP响应报文,跟请求报文一样由三部分组成:响应行、响应头、响应体。如图2-2-6-5,响应行包含协议及版本、状态码及其描述。响应头包含了若干个属性与属性值,他们通过冒号分隔,格式为“属性名:属性值”,客户端可以通过这个获取相关信息。响应体一般存放我们真正需要的文本。

响应状态码由三位数字组成,常用的状态码如下:

  1. 200 OK:客户端请求成功。
  2. 400Bad Request:客户端请求由语法错误,服务器无法识别。
  3. 401 Unauthorized:请求未经授权。
  4. 403Forbidden:服务器收到请求,但拒绝提供服务。
  5. 404Not Found:请求资源不存在。
  6. 500Internal Server Error:服务器发生不可预期的错误。
  7. 503Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

常用的的响应报文头属性:

  1. Cache-Control:服务器通过该报文头属性告诉客户端如何对响应的内容进行缓存,例如值为max-age=600,则表示客户端对响应内容缓存600秒,在此期间如果客户端再次访问该资源,直接从客户端缓存中获取内容,不再向服务器获取。
  2. Location:这个属性用于网页重定向,例如服务器把重定向的地址添加到响应包头的这个属性,这样客户端浏览器解析报文后就直接重新跳转到这个地址。
  3. Set-Cookie:利用这个属性服务器端可对客户端的cookie进行设置。

图2-2-6-5 HTTP响应报文

 

 

HTTP的版本

HTTP协议最初设计就是为了通过网络来支持客户端与服务器之间的事务处理。HTTP从1990年开始使用,最原始的版本是HTTP0.9,这是一个面向消息的简单协议,简单描述了客户端与服务器之间请求与响应的过程,客户端向服务器端请求连接,通过握手建立连接后向服务器发送GET方法访问,服务器端将响应结果返回给客户端,然后断开连接。HTTP1.1、HTTP1.0向下兼容HTTP0.9,是现在使用的HTTP协议的子集。

经过三年的发展,HTTP1.0被提出,它对HTTP0.9进行了很多改进:增加了请求类型,如HEAD、POST等;添加了HTTP版本号;添加了响应码表示处理的状态;使用MIME的消息标题和消息体格式来描述访问对象的数据类型和附加在后面的元信息,例如Content-type:text/html表明响应的消息实体是HTML文件,引入MIME后有利于扩大HTTP协议处理数据类型;增加了对代理的支持,HTTP0.9版本只支持直接连接交互,而HTTP1.0可以通过代理实现间接连接交互。

又经过四年的发展,产生了HTTP1.1。它是在HTTP1.0基础上实现的一次飞跃,主要在性能、安全、数据类型处理等方面进行了改进。提出服务器端缓冲对象的概念,在减少网络相同类型内容的反复传送、提高访问速度等方面有很大的提高。HTTP1.1采用了永久连接,这样很好地提高了性能,之前的版本都是默认响应完就直接关闭连接,下次又要重新建立连接。同时,它还允许客户端与服务器端对内容进行协商,突破HTTP1.0中服务器和IP一一对应的限制,可以通过主机名来决定由哪个服务器提供服务。

最后,为了适应WWW的发展需要,HTTP在功能和性能上进行了大量的改进。HTTPPng将是下一代的HTTP协议,在效率跟性能上都将有进一步的提高。

==========广告时间==========

鄙人的新书《Tomcat内核设计剖析》已经在京东预售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

=========================

时间: 2024-10-02 11:59:25

协议系列之HTTP协议的相关文章

协议系列之TCP协议

3.TCP协议 从上一节我们了解了什么是IP协议,以及IP协议的一些特性,利用IP协议传输都是单向的,不可靠的,无连接状态的.正是这些特性,于是便产生了TCP协议.TCP协议属于传输层,在IP协议网络层之上,竟然IP协议不可靠,那就必须要在其上多一个TCP协议以实现传输的可靠性.就像我们寄出一封信,如果对方不回信,不通过别的渠道告诉你,你永远都无法保证这封信能准确送到对方手上.同样,TCP协议采取了类似的措施来保证数据包的准确送达,它规定接收端发送一个确认数据包回来. 严格地说,TCP协议提供了

协议系列之UDP协议

上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢.那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议.比起TCP,UDP更像是我们用手机发送短信,只管发送出去,但不能保证对方收到,不会建立连接,也没有确认环节. 图2-2-4-1为UDP协议报文结构.比起TCP,UDP报文的结构相对简单,只有源端口.目的端口.报文长度.校验和四个字段.其中源端口跟校验和是可选的,由于UDP不用接收端回复确认信息,所

协议系列之IP协议

1.协议 协议(protocol)的定义:为计算机网络中进行数据交换而建立的规则.标准或约定的集合.两个终端相互通信时双方达成的一种约定,规定了一套通信规则,双方通信必须遵守这些规则.这些规则规定了分组报文的交换方式.报文的结构.报文每部分所代表的意思(例如从n位到m位表示目的地址),以及规定了怎样解析次协议的报文.举个例子,我们打开浏览器后,输入http://www.baidu.com,此时即是使用了HTTP协议进行通信,HTTP协议的设定就是为了约束规范浏览器跟服务器双方的通信.浏览器发送的

网络协议系列之二:HTTP(2)

这篇文章继续对HTTP协议进行说明. 一个http事务包括客户向HTTP服务器发送请求以及服务器向客户端发送响应两个过程.根据事务的特点,这两个过程具有原子性,任何一个过程失败都会进行回滚(恢复事务之前的状态).从请求与响应的角度出发,http的知识点都是围绕这两个角度展开的.每次客户的请求都会向服务器发送一个请求报文,请求报文的结构包括请求行.首部行.空行和请求体,一个http响应包括响应行.首部行.空行和响应体.http是基于TCP协议之上的应用层协议,默认使用80端口进行传输,也有基于SS

网络协议系列之四:IGMP、ICMP和ARP

前言 IGMP协议是一个组管理协议,它帮助多播路由器创建以及更新与每一个路由接口相连的忠实成员列表(就是与该路由接口连接频率较高).ICMP协议实际上就是差错控制协议,弥补了IP协议没有差错纠正机制以及差错报告的缺憾.ARP是一个地址映射协议,可以把一个IP地址映射为MAC地址. IGMP协议 1.IGMP是管理组成员关系的协议 2.IGMP报文分为成员关系报告报文和成员关系查询报文.成员关系查询报文是为了查找网络中活跃的组成员而发送的报文,而成员关系报告报文是为了记录响应者在网络中的成员关系而

网络协议系列之十一:互联网协议入门(一)

前言 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗? 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite).它们对电脑如何连接和组网,做出了详尽的规定.理解了这些协议,就理解了互联网的原理. 下面就是我的学习笔记.因为这些协议实在太复杂.太庞大,我想整理一个简洁的框架,帮助自己

网络协议系列之三:IP

前言 这篇博客主要对IP协议中一些基础知识点加以总结,并将书中一些晦涩难懂的部分去除了.IP地址协议是网络层中最重要的协议,IP地址协议可以对因特网上的所有设备进行唯一标识,也正因为有了IP协议,我们的计算机才能实现与全球任意一台设备进行通信. 同时这也是网络层存在的意义,我将对部分的内容分为两个部分加以总结:一.首先对IP协议部分的知识加以总结:二.对网络层其他的协议加以总结,包括ICMP.IGMP.ARP等协议. IP协议基础篇 地址空间 这个概念很好理解,如果一个协议用a位(a个bit)表

协议系列之TCP/IP协议

根据前面介绍的几种协议,将IP协议.TCP协议.UDP协议组合起来,于是便有了TCP/IP协议.现在很多的应用的通信都是建立在TCP/IP协议的基础上,运用非常广泛,很有必要对其学习一下. 打个不太恰当的比方,TCP/IP协议可以看成是邮局与邮递员的关系(实际TCP/IP协议族会包含四层,应用层.传输层.网络层.链路层).这个协议族中的IP协议定位到哪台计算机,而具体到这台计算机的哪个端口(应用程序)就需要TCP协议,一个属于网络层,一个属于传输层,互相依赖,提供有效的解决通信问题的措施.这就好

大话存储系列9——FC协议

1.Fibre Channel  Fibre 是网状, Fiber是光纤,这两个词现在基本上弄的很混乱,我们要讲的FC是网状通道的意思.我们所说的FC协议时一套完全独立的网络协议,比以太网要复杂的多,它除了用光纤作为传输介质,也可以用铜线,甚至是双绞线,有些时候甚至是无线.微波.红外线等都可以来实现FC协议的物理层.所以人们所说的FC协议时光纤通道协议本身就不准确.同样我们可以想到,以太网协议与是否用光纤或者铜线.双绞线来传输也没有必然的联系. 从分层协议栈的角度看,FC仅仅包含了从物理层到传输