Http与Https

Http与Https的一些知识点总结

Posted by Ted on September 13, 2016

1、TCP/IP定义

TCP/IP是互联网相关的各类协议族的名称

2、TCP/IP四层模型

OSI七层模型太过繁琐,所以就对应有了TCP/IP四层模型,对应的将OSI中的应用层、表示层、会话层统一归为应用层。

  • 应用层:决定了向用户提供应用服务时通信的活动。HTTP协议。

  • 传输层:提供处于网络连接中的两台计算机之间的数据传输,TCP和UDP协议就在这一层

  • 网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。IP协议

  • 链路层:用来处理连接网络的硬件部分。

3、TCP三次握手,四次挥手

4、一次完整的HTTP请求

一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同样有标准的格式。

HTTP请求格式主要有四部分组成,分别是:请求行(请求方法(GET/POST/DELETE/PUT/HEAD)、URI路径、HTTP的版本号)、请求头(缓存、客户端信息等)、空行、消息体(请求数据),每部分内容占一行。

HTTP响应消息的格式包括:状态行(有HTTP协议版本号,状态码和状态说明)、响应头、空行、消息体。每部分内容占一行。

5、HTTP请求报文

5.1请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行、请求数据4个部分组成

5.2请求行

由方法、服务器内部URL(使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始)、协议版本组成

5.3请求方法

  • GET:请求获取Request-URI所标识的资源。

  • POST:在Request-URI所标识的资源后附加新的数据。

  • HEAD:请求获取由Request-URI所标识的资源的响应消息报头。

  • PUT:请求服务器存储一个资源,并用Request-URI作为其标识。

  • Delete:请求服务器删除Request-URI所标识的资源。

  • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。

  • CONNECT:保留将来使用。

  • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。

6、HTTP返回报文

状态行(有HTTP协议版本号,状态码和状态说明)、响应头、空行、消息体

状态码

常见状态码

  • 301被请求的资源已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
  • 302请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求

  • 404 没有找到
  • 405 方法不允许
  • 408 请求超时
  • 500 服务器内部错误

7、长连接

在报文中有一个字段:connnection:keep-alive;是长连接的意思,从Http1.1开始就是默认TCP保持长连接,只要任意一端没有提出断开连接,则会一直保持连接状态,一次长连接可以进行多次请求和响应,好处是可以减少建立连接和断开连接的开销,减少服务器的负载,另外也可以加快Http请求和响应;

8、Cookies

Http是无状态协议,但有的时候客户端与服务器又要保持某些状态,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

Cookie会根据从服务器端发送的响应报文中的一个Set-Cookie的头部信息,通知客户端来保持Cookie。当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入Cookie后发送出去。

服务器端发现客户端发送过来的Cookie后,会去检查究竟从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

9、HTTPS

其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全;而对于接收端,在SSL/TSL将接收的数据包解密之后,将数据传给HTTP协议层,就是普通的HTTP数据。HTTP和SSL/TSL都处于OSI模型的应用层。从HTTP切换到HTTPS是一个非常简单的过程

Http有以下不足

  • 通信使用明文,内容可能被窃听
  • 不验证通信双方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能遭到篡改

SSL/TSL

是个加密套件,负责对HTTP的数据进行加密。TLS是SSL的升级版, HTTPS就是在http和TCP之间加了一层TSL/SSL协议。先通过公开加密生成对称密钥,之后用对称密钥进行对话。

加密过程

  1. SSL客户端通过TCP和服务器建立连接之后(443端口),并且在一般的tcp连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书(公钥)。(证书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)。
  2. Client在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。
  3. 如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后把它发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。

简单来说就是,服务器向客户端传证书(公钥),客户端生成一个私钥,并用证书(公钥)加密还给服务器,服务器再用证书(公钥)解开私钥,从此两端就用私钥进行通信(变成了对称加密)

HTTPS抓包原理

  1. Https抓包的原理就是抓包程序将服务器返回的证书截获
  2. 然后给客户端返回一个抓包程序的证书,
  3. 客户端发送的数据用抓包程序给的证书生成的密钥加密
  4. 抓包程序得到客户端发送的数据抓包程序用自己的证书解密出来,再用服务器证书加密
  5. 抓包程序再把数据发给服务器