http,https

      最后更新:2022-01-15 21:41:56 手机定位技术交流文章

      网络分层

      在这里插入图片描述

      一、HTTP 和 HTTPS 的基本概念

      HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定,也就是说,http协议规定了超文本传输所要遵守的规则。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议, HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。

      HTTPS:是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
      HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
      在这里插入图片描述

      二、HTTP 和 HTTPS 的特点

      HTTP特点:

      • 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
      • 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
      • 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
      • 简单快速、灵活
      • 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

      HTTPS特点:
      基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

      • 1、内容加密:采用混合加密技术,中间者无法直接查看明文内容。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。
      • 2、验证身份:通过证书认证客户端访问的是自己的服务器。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 。
      • 3、保护数据完整性:防止传输的内容被中间人冒充或者篡改。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。

      HTTPS 的缺点(对比优点)

      • 1、HTTPS协议多次握手,导致页面的加载时间延长

      • 2、HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。

      • 3、HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用

      • 4、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。

      • 5、SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。

      • 6、HTTPS 协议的加密范围也比较有限。SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

      HTTP 与 HTTPS 的区别

      • 1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

      • 2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

      • 3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

      • 4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

      三、http状态码

      当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

      HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:

      状态码分类:

      1XX- 信息型,服务器收到请求,需要请求者继续操作。
      2XX- 成功型,请求成功收到,理解并处理。
      3XX - 重定向,需要进一步的操作以完成请求。
      4XX - 客户端错误,请求包含语法错误或无法完成请求。
      5XX - 服务器错误,服务器在处理请求的过程中发生了错误。

      常见状态码:

      200 OK - 客户端请求成功
      301 - 资源(网页等)被永久转移到其它URL
      302 - 临时跳转
      400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
      401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
      404 - 请求资源不存在,可能是输入了错误的URL
      500 - 服务器内部发生了不可预期的错误
      503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

      四、HTTP通信传输

      客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。
      在这里插入图片描述
      报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。
      在这里插入图片描述

      • 1 第一次握手
        客户端给服务器发送一个SYN段, 该段中也包含客户端的初始序列号(Sequence number = x)。

      SYN是同步的缩写,SYN 段是发送到另一台计算机的 TCP 数据包,请求在它们之间建立连接

      • 2 第二次握手
        服务器返回客户端 SYN +ACK 段, 该段中包含服务器的初始序列号(Sequence number = K);同时使 Acknowledgment number = x + 1来表示确认已收到客户端的 SYN段(Sequence number = x)。

      ACK 是“确认”的缩写。 ACK 数据包是任何确认收到一条消息或一系列数据包的 TCP 数据包

      • 3 第三次握手
        客户端给服务器响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包), 该段中使 Acknowledgment number = Y+ 1来表示确认已收到服务器的 SYN段(Sequence number = Y)。

      在这里插入图片描述

      为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

      比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。
      在这里插入图片描述
      为什么需要四次挥手呢?TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

      五、HTTPS通信传输

      HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输

      HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
      在这里插入图片描述
      HTTPS在传输的过程中会涉及到三个密钥:

      服务器端的公钥和私钥,用来进行非对称加密

      客户端生成的随机密钥,用来进行对称加密

      一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
      1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

      2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

      3.服务器将自己的公钥发送给客户端。

      4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

      5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

      6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

      7.然后服务器将加密后的密文发送给客户端。

      8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/16575.html

          热门文章

          文章分类