HTTP和HTTPS协议

1,885 阅读11分钟

HTTP

HTTP简介

  • HTTP协议是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种 网络协议,所有的WWW文件都必须准许你这个标准。它是从WEB服务器传输超文本编辑语言(HTML)到本地浏览器的传送协议
  • 设计HTTP最初的目的是为了提供一种发布和接受HTML页面的方法

HTTP原理

  • HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件,图片文件,查询结果等
  • HTTP协议一般用于B/S架构,浏览器作为HTTP客户端听过URL想HTTP服务端即WEB服务器发送所有请求

HTTP特点

  • 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
  • 简单快速,灵活
  • 通信使用明文、请求和响应不会对通信放进行确认、无法保护数据的完整性
  • 无连接:下次每次连接只处理一个请求。服务器处理完请求,并受到客户端的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session
  • 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传

URI和URL的区别

  • URI是用来标示一个具体的资源的,我们可以通过URI知道一个资源是什么
  • URL则是用来定位具体资源的,标示了一个具体的资源位置,互联网上的每个文件都有一个唯一的URL

HTTP报文组成

  • 请求报文构成

    • 请求行:包括请求方法、URL、协议/版本
    • 请求头(Request Header)
    • 请求正文
  • 响应报文构成

    • 状态行
    • 响应头
    • 响应正文
  • 报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接

  • 为什么需要三次握手呢?

    • 为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误
  • 三次握手实质上就相当于下列的对话

    • 客户机:服务器,我想要和你建立连接,你同意吗?(SYN=1)
    • 服务器:客户机,我同意和你建立连接(ACK=1);我也想和你建立连接,你同意吗?(SYN=1)
    • 客户机:服务器,我同意和你建立连接。(ACK=1)
  • 在进行第二次握手时(即服务器向客户机进行应答时),可以看作时发了两次包,先回答客户机的服务请求(ACK=1,ack=x+1),然后再向客户机发出请求(SYN=1,seq=y)

  • 四次挥手实质上就相当于下列的对话

    • 客户机:服务器,我想和你断开连接,你同意吗?(FIN=1)
    • 服务器:我同意(ACK=1)(在此期间,服务器可能还会向客户机发送数据,但是客户机却不能再向服务器发送数据)
    • 服务器:客户机,我想要和你断开连接,你同意吗?(FIN=1)
    • 客户机:我同意。(ACK=1)
  • 再等待2MSL时间后就真正断开了连接

HTTPS

HTTPS简介

  • HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全通道,加密数据包。HTTPS使用的主要目的是提供对网络服务器的身份认证,同时保护交换数据的隐私与完整性。TLS是传输层加密协议,前身是SSL协议(SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持)

HTTPS的缺点

  • HTTPS协议多次握手,导致页面的加载时间延长近50%
  • HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗
  • 申请SSL证书需要钱,功能越请打的证书费用越高
  • SSL设计到的安全算法会消耗CPU资源,对服务器资源消耗较大

HTTP和HTTPS的区别

  • https协议需要到ca申请证书
  • http是超文本传输协议,心思是明文传输,https则是具有安全性的ssl加密传输协议
  • http和https使用的链接凡是不同,默认的端口也不一样,http是80,https是443
  • http的连接很简单,是无状态的;https协议是由SSL+ HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

HTTPS优化总结易记版

  • HSTS重定向技术:将http自动转换为https,减少301重定向
  • TLS握手优化:在TLS握手完成前客户端就提前向服务器发送数据
  • 会话标识符:服务器记录下与某客户端的会话ID,下次连接客户端发ID过来就可以直接用之前的私钥交流了
  • OSCP Stapling:服务器将带有 CA 机构签名的 OCSP 响应在握手时发给客户端,省的客户端再去CA查询
  • 完全前向加密PFS:使用更牛逼复杂的秘钥算法

HTTP与HTTPS的工作原理

HTTP的工作原理

  • 一次HTTP操作称为一个事物,其工作过程可分为四步
    • Client与Server建立连接,单击某个超链接,HTTP的工作开始
    • 连接建立后,Client发送一个请求给Server,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符,Client信息和可能的内容
    • Server接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括Server信息、实体信息和可能的内容
    • Client接收Server返回的信息通过浏览器显示在用户的显示屏上,然后Client和Server断开连接

HTTPS的工作原理

  • Client使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接
  • Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端
  • 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级
  • 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
  • Web服务器利用自己的私钥解密出会话密钥
  • Web服务器利用会话密钥加密与客户端之间的通信

常见问题

SSL与TLS的区别?

  • SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议
  • TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议

第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?

  • (伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名

GET方法与POST方法的区别,什么时候应该使用GET,什么时候应该使用POST

  • GET
    • 一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
    • 通过地址栏来传值
  • POST
    • 一般用于修改服务器上的资源,对所发送的信息数量没有限制
    • 通过body来传值
  • 小结
    • 一般信息的获取一般使用get请求
    • 以下情况下最好使用post请求
      • 向服务器发送大量数据(因为post没有发送数据的数量限制)
      • 无法使用缓存文件(会更新服务器上的文件)
      • 发送包含未知字符的用户输入时

三次握手中,为什么客户机最后还要再向服务器发送一次确认呢?

  • 这是为了防止已失效的连接请求报文段突然又传到了服务器。所谓“已失效的连接请求报文段”是这样产生的。考虑一种正常的情况,客户机发出连接请求,但因为连接请求报文丢失而未收到确认。于是客户机再重传了一次连接请求,后来收到了确认,建立了连接。数据传输完后,就释放了连接。客户机共发送了两个连接请求报文段,其中第一个丢失,第二个到达了服务器,没有所谓的“已失效的连接请求报文段”
  • 但是如果出现了一种异常情况,即客户机发出的第一个报文段并没有丢失,而是在某个节点上长时间滞留了,直至客户机向服务器发送了第二个报文段并且已经完成数据传输释放了连接,此时,第一个报文到达服务器后会被误以为是客户机重新发起的一次连接请求,实质上是一个早已失效的连接请求。如果没有第三次握手,那么这个连接就建立了,但是客户机并不会向服务器发送任何请求,这样连接就会一直持续,白白的消耗网络资源

为什么需要四次挥手呢?

  • TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接

MSL是什么

  • MSL是Maximum Segment Lifetime的缩写,译为报文最大生存时间,也就是任何报文在网络上存活的最大时间,一旦超过该时间,报文就会被丢弃。2MSL也就是指的2倍MSL的时间

为什么客户机发送完最后一个数据后要在TIME-WAIT状态等待 2MSL(四分钟)的时间呢?

  • 为了保证客户机最后发送的那个ACK报文段能够到达服务器。这个ACK报文段可能会丢失。因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。服务器会超时重传这个FIN+ACK报文段,而客户机就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着客户机重传一次确认,重新启动2MSL计时器,最后客户机和服务器都可以进入到CLOSED(关闭)状态。如果没有2MSL等待时间,那么就无法收到重传的FIN+ ACK包,无法进入正常的CLOSED状态
  • 防止“已失效的连接请求报文段”出现在本连接中。客户机在发送完最后一个ACK报文段,再经过时间2MSL,就可以使本连接持续的时间内所产生的报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段