【tomcat】01 Web服务器机制 之 通信协议

一、、Http 与 Https

1、Http / Https介绍

  1. HTTP是Hyper Text Transfer Protoco(超文本传输协议)的缩写。HTTP协议是用于从Web服务器传输超文本到本地浏览器的协议,它能使浏览器更加高效,使网络传输减少,保证计算机正确快速地传输超文本文档。
  1. 现在我们普遍使用的版本是HTTP1.1。HTTP是一个应用层协议,它由请求和响应组成,是一个标准的B/S模型。同时,它也是一个无状态的协议,即同一个客户端上,此次请求与上一次请求是没有对应关系的。
  1. HTTPS简单地说就是HTTP的安全版。在安全性要求比较高的网站(例如银行网站)上会看到HTTPS,它本质上也是HTTP协议,只是在HTTP增加了一个SSL或TLS协议层。SSL/TLS协议提供了加解密的机制,所以它比HTTP明文传输更安全。
  1. HTTP可以直接进入TCP传输层,也可以在TCP层上加一层SSL/TLS层,这样就先经过SSL/TLS再进入TCP传输层。这两种方式便是HTTP与HTTPS。一般HTTP的端口号为80,而HTTPS的端口号为443。

2、SSL/TLS协议层主要的职责

借助下层协议的信道安全地协商出一份加密密钥,并且用此密钥来加密HTTP请求响应报文。解决安全性方面的问题

a:提供验证服务,验证本次会话实体身份的合法性
b:提供加密服务,强加密机制能保证通信过程中的消息不会被破译
c:提供防篡改服务,利用Hash算法对消息进行签名,通过验证签名保证通信内容不被篡改

3、对称加密、非对称加密、Hash 算法

  1. 对称加密。密钥只有一个,加密、解密都是这个密码,加解密速度快,典型的对称加密算法有DES、AES、RC4等。
  1. 非对称加密。密钥成对出现,分别为公钥与私钥,从公钥无法推知私钥,反之,从私钥也不能推知公钥。

a: 加密、解密使用不同的密钥,公钥加密需要私钥解密,反之,私钥加密需要公钥解密。

b: 非对称加密速度较慢,典型的非对称加密算法有RSA、DSA、DSS等

  1. Hash算法,这是一种不可逆的算法,它常用于验证数据的完整性。

4、HTTPS的工作原理及流程

HTTPS是基于TCP/IP协议通信的,属于可靠传输,必须要先进行三次握手,完成连接的建立。接着是SSL的握手协议,此协议非常有效地让客户和服务器之间完成相互之间的身份验证及密钥协商。

  1. 客户端浏览器向服务器发送SSL/TLS协议的版本号、加密算法的种类、产生的随机数,以及其他需要的各种信息。
  1. 服务器从客户端支持的加密算法中选择一组加密算法与Hash算法,并且把自己的证书(包含网站地址、加密公钥、证书颁发机构等)也发送给客户端。
  1. 浏览器获取服务器证书后验证其合法性,验证颁发机构是否合法,验证证书中的网址是否与正在访问的地址一致,通过验证的浏览器会显示一个小锁头,否则,提示证书不受信。
  1. 客户端浏览器生成一串随机数并用服务器传来的公钥加密,再使用约定好的Hash算法计算握手消息,发送到服务器端。
  1. 服务器接到握手消息后用自己的私钥解密,并用散列算法验证,这样双方都有了此次通信的密钥。
  1. 服务器再使用密钥加密一段握手消息,返回给客户端浏览器。
  1. 浏览器用密钥解密,并用散列算法验证,确定算法与密钥。
A(客户端)B(服务器)(0)我们需要完成三次握手!!(2)send (安全访问请求 + 实现的算法列表)(3)确定此次通信的加密算法与散列算法 send (证书 + 公钥)(4)随机生成对称密钥,公钥加密,散列算法计算握手消息(5)(6) 自己私钥解密,散列算法验证,再使用密钥加密一段握手消息 返回(7) 私钥解密 散列算法验证 确定算法与密钥(8)我们可以开始通信A(客户端)B(服务器)

二、HTTP请求/响应模型

1、HTTP协议永远都由客户端发起请求,由服务器进行响应并发送回响应报文。

  1. 如果没有客户端进行请求或曾经请求过,那么服务器是无法将消息推送到客户端的。HTTP采用了请求/响应模型,客户端向服务器发送一个请求,请求头包含请求方法、URI、协议版本、请求修饰符、客户信息,以及类似于MIME结构的消息内容。
  1. 服务器以一个状态行作为响应,内容包括消息协议版本、成功(或失败)编码、服务器信息、实体元信息及一些实体内容。这样就完成了一个请求/响应过程。

2、一个HTTP请求/响应的工作流程

  1. 客户端浏览器先要与服务器建立连接,即通过三次握手建立连接。在浏览器上最常见的场景就是单击一个链接,这就触发了连接的建立。
  1. 连接建立后,客户端浏览器发送一个请求到服务器,这个过程其实是组装请求报文的过程。
  1. 服务器端接收到请求报文后,对报文进行解析,组装成一定格式的响应报文,返回给客户端。
  1. 客户端浏览器接收到响应报文后,通过浏览器内核对其进行解析,按照一定的外观进行显示,然后与服务器断开连接。
A(客户端)B(服务器)三次握手!!建立连接 、send data解析数据 、封装 return dataA(客户端)B(服务器)

三、解析HTTP报文

1、具体请求与响应报文格式是怎样的?报文又是怎样解析的?

  1. 一个HTTP请求由三部分组成:请求行、请求头部、请求体。

a: 请求行(request line)由请求方法字段、URL字段和HTTP协议版本字段组成,它们用空格分隔并以“\r\n”结尾。
b: 请求头部(request header)包含若干个属性与属性值,它们通过冒号分隔,格式为“属性名:属性值”,每个属性-属性值对以“\r\n”结尾,整个请求头部又以“\r\n”结尾。

c: 请求体(requestbody)一般在POST方法里使用,而不在GET方法中使用,例如浏览器将表单中的组件格式化成param1=value1&param2=value2键值对组,然后将其存放至请求体中,以此完成对表单参数的传输。

2、请求方法:

GET 和 POST(最常见的请求方法) DELETE、HEAD、OPTIONS、PUT、TRACE

3、GET 和 POST

  1. GET方法,请求参数和值附加在URL后面,用问号隔开,如/index.jsp? id=10000。用GET方法传递的参数都能在地址栏上看到,大多浏览器对地址的字符长度做了限制,最多是1024个字符。
  1. 所以要传送大量数据,就要选择用POST方法。POST方法允许客户端提交更多信息给服务器,它把请求参数封装到请求体中,可以传输大量数据,不会对数据大小进行限制,同时也不在地址栏显示参数。

4、请求头部常见的典型属性有:

  1. User-Agent:客户端请求的浏览器类型,是客户端应用程序的名称,不同版本、不同厂商的值都可能不相同。
  1. Accept:告诉服务器客户端可识别的媒体类型列表。这个属性的值可以是一个或多个MIME类型的值,服务器可以根据这个判断是否发送这个媒体类型。
  1. Host:供客户端访问的那台机器的主机名和端口号。
  1. Cookie:用于传输客户端的Cookie到服务器,服务器维护的Session就是通过Cookie附带的JSESSIONID值来区分哪个客户端关联哪个Session的。还可以通过重写URL的方式将JSESSIONID附带在URL后面。
  1. Referer:表示这个请求是从哪个URL过来的,可以让服务器知道客户端从哪里获得其请求的RUL。

例如在A网站的页面单击一个链接进入B网站的页面,浏览器就会在请求中插入一个带有A网站中该页面地址的Referer头部。

  1. Cache-Control:通过这个属性可以对缓存进行控制。

5、HTTP响应报文

  1. 响应报文由三部分组成:响应行、响应头部、响应体(如图1.5所示)。

a: 响应行(response line)包含协议及版本、状态码及描述,并以“\r\n”结尾。

b: 响应头部(response header)包含若干个属性与属性值,它们通过冒号分隔,格式为“属性名:属性值”,每个属性-键值对都以“\r\n”结尾,并且响应头部最后以“\r\n”结尾。

c: 响应体(response body)存放真正需要的文本。

6、常用的状态码(响应状态码由三位数字组成)

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

Cache-Control:服务器通过该报文头属性告诉客户端如何对响应的内容进行缓存。

例如,值为max-age=600,则表示客户端对响应内容缓存600秒,在此期间,如果客户端再次访问该资源,可以直接从客户端缓存中获取内容,不必再向服务器获取。

Location:这个属性用于网页重定向,

例如,服务器把重定向的地址添加到响应报文头部的这个属性,这样客户端浏览器解析报文后就直接重新跳转到这个地址。

Set-Cookie:利用这个属性服务器端可对客户端的Cookie进行设置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章