深入了解HTTP协议

1.什么是HTTP协议
http是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。他用于界定客户端向服务端链接时的通讯格式,目前有两个版本:http1.0和http1.1

  • http1.0:
    在站点访问中,因为一个站点中可能会接受来自成千上万用户的访问,为了提高系统的效率,http的链接被设置为无状态链接,即每次请求数据需要与服务器建立一个tcp链接,然后请求完一次数据后,连接即断开,服务端不会记录连接的来去。但这也留下了一些缺陷,即当向服务器请求带有多图片的网页时,需要根据每一个图片的网址再去跟服务器建立连接,这样一来,效率反而降低

  • http1.1
    http1.1主要用于克服客户端一次请求只能获得单一数据的缺点,即再一次链接中,可以获取多个数据文件,同时可以在上一次请求还未回复时,发出下一次请求,但服务器回应也是按请求的先后顺序回应。主要通过持久连接和管道技术实现

    • 持久连接:只要任何一方没有明确提出断开连接,则保持TCP连接状态;当这个链接闲置一段时间后,就会被关闭
    • 管线化:在管线化技术出现以前,发送请求后需等待并收到响应之后才能发送下一个请求,而现在可以在响应回复之前发送下一个请求

2.基于TCP/IP协议族实现的HTTP
(1)TCP/IP协议族:是指互联网相关联的协议集合都叫TCP/IP协议族
(2)TCP/IP分层管理:应用层、传输层、网络层、数据层

  • 应用层:决定了向用户提供应用服务是通信的活动,包括FTP、DNS服务
  • 传输层:提供处于网络连接中的两台计算机的数据传输,主要的两种数据传输协议包括包括TCP和UDP,区别在于TCP传输更加可靠
  • 网络层:用以规定网络上流动的数据包通过怎样的路径到达对方计算机
  • 链路层:用来处理连接网络的硬件部分,包括操作系统、设备驱动等

(3)TCP/IP通信传输流
这里写图片描述

第一步,客户端在应用层发出想要看到某个web页面的http请求。
第二步,HTTP协议为传输方便,传输层利用TCP协议将从应用层处收集到的数据进行分割,并在各个报文上打上标记序号,及端口号转发给网络层。
第三步,在网络层IP协议增加作为目的地址的MAC地址转发给链路层,这样一来,发往网络的通信请求就准备齐全了。
第四步,接收端的服务器在链路层接收到数据,按层往上层发送,一直到应用层。当传输到应用层,才算真正接收到由客户端发送过来的HTTP请求。

发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息(HTTP数据,TCP首部,IP首部,以太网首部),这种把数据信息包装起来的做法称为封装
这里写图片描述

3.TCP协议、IP协议、DNS服务的作用

  • TCP协议:
    • 位于传输层,TCP可提供可靠的字节流服务
    • 所谓的字节流服务是指将大块数据切分成以报文段为单位的数据包进行管理,TCP为了数据能准确到达目标,采用三次握手协议
  • IP协议:
    • 位于网络层,负责传输,负责准确将数据包传输到对方,其中要满足的两个重要条件就是ip地址和mac地址
    • 没人能全面掌握互联网的传输状况,因此每次传输需要经过多台计算机或网络设备中转才能到达对方,而通过ARP协议,可以依据ip地址反查出对方的mac地址
  • DNS服务:
    • DNS位于应用层,他可以用关于通过域名查找ip地址,或者通过ip地址查找域名

4.http请求响应的完整过程

  • 浏览器想浏览某一页面
  • 浏览器访问自身DNS缓存(有一定时效),没有则搜索操作系统自身的DNS缓存,在没有则访问本地的host文件
  • 都没有则发起DNS的调用(域名解析),运营商服务器发起迭代的DNS查询
  • 返回查询结果并缓存
  • 浏览器使用HTTP协议生成针对目标web服务器的HTTP请求报文
  • 传输层将从应用层接收到的数据(HTTP请求报文)进行分割,并在各个报文打上标记序号以及端口号发给网络层
  • 此时发生三次握手机制,建立TCP/IP连接
  • 建立连接后,浏览器就可以发送http请求
  • 服务器接收请求后,将请求结果返回给浏览器
  • 当浏览器拿到资源后,进行页面渲染

5.http中可使用的方法及用途

  • get方法:获取资源
  • post方法:传输内容实体
  • put:传输文件
  • Head:获得报文首部
  • delete:删除文件
  • options:询问支持的方法
  • trace:追踪路径
  • connect:要求用隧道协议链接代理(即在链接时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TSL协议,将通信内容加密后传输,即所谓的https)

6.http的缺点及对应方法
(1)http的缺点:

  • 通信使用明文,可能被窃听
  • 不验证通信方身份,可能遭遇伪装
  • 无法验证报文de完整性,可能已遭篡改

(2)防窃听—>加密处理

  • 通信加密:通过ssl或tsl与http的组合使用,建立隧道加密通信内容
  • 内容加密:客户端对http报文进行加密处理后在发送(客户端和服务端同时具有加密和解密机制)

(3)遭遇对方身份的伪装

  • 查明对方证书:使用ssl,可以提供第三方机构颁发的证书进行确认对方身份

(4)内容遭篡改–>使用数字签名的方法

7.https:超文本安全传输协议
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。(即http首先和ssl建立通信,再有ssl与tcp建立通信)

https的安全通信机制(以下主要涉及ssl通信建立):
这里写图片描述

步骤1: _客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤2: _服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
步骤3: _之后服务器发送Certificate报文。报文中包含公开密钥证书
步骤4: 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5: SSL第一次握手结束(拿到服务器的公钥)之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密
步骤6: 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密
步骤7: 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8: 服务器同样发送Change Cipher Spec报文。
步骤9: 服务器同样发送Finished报文。
步骤10: 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
步骤11: 应用层协议通信,即发送HTTP响应。
步骤12: 最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。

https的缺点:处理速度会变慢,比http慢2-100倍

  • 原因一:通信慢
  • 原因二:大量消耗CPU和内存等资源
  • 使用ssl加速器改善