• NetWork——关于HTTP、HTTPS的知识总结


    0  前言

    作为一个Android开发人员,应用中难免会用到和服务器交互的情境,因此了解一些常用的网络协议是必须的,本文将总结诸如HTTPHTTPS等协议的概念和区别,希望能给读者带来一些收获。本文原创,链接为SEU_Calvin的博客

     

    1   HTTP

    网络由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。我们的超文本传输协议(HyperText Transfer Protocol)处于计算机网络中的应用层,默认端口号为80HTTP建立之初主要目的是为了将超文本标记语言(HTML)文档通过客户端url请求从Web服务器传送到客户端的浏览器。包括后面由于我们的页面变得复杂,HTML页面有了CSSJavascript等,这些其实都是基于HTTP协议的。

    HTTP是建立在TCP协议之上的(TCP协议对应于传输层、IP协议对应于网络层),所以HTTP协议的优化都是基于TCP协议本身的特性,例如TCP协议的三次握手和四次挥手、每次建立连接带来的RTT延迟时间等。

    为了控制本篇篇幅,关于TCP三次握手和四次挥手的知识请看这篇

     

    1.1  持续性与非持续性

    1HTTP 1.0,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。(2而在HTTP 1.1,默认保持长连接,数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

    使用了长连接的好处包括可以使用HTTP 流水线技术,它是指在一个TCP连接内,多个HTTP请求可以并行,下一个HTTP请求在上一个HTTP请求的应答完成之前就发起。使用这个技术的还必须是幂等的HTTP方法,因为客户端无法得知当前已经处理到什么地步,重试后可能发生不可预测的结果。POST方法不是幂等的:同样的报文,第一次POST跟第二次POST在服务端的表现可能会不一样。

     

    1.2  HTTP协议的主要特点总结

    1)支持客户/服务器模式。

    2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETPOST


    (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    (4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后即断开连接,可以节省传输时间。

    (5)无状态:指协议对于事务处理没有记忆能力,服务器不保存浏览器的任何信息。每次提交的请求之间没有关联。意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快


    2   HTTPS

    HTTPS是由SSL协议+HTTP协议构建的可进行加密传输、身份认证的网络协议。HTTPS的出现主要是为了拟补HTTP在安全上的一些不足,可以说HTTP +加密+认证+完整性保护= HTTPS本文原创,链接为SEU_Calvin的博客

    (1)通信使用明文(不加密),内容可能会被窃听,保密性不足。

    (2)不验证通信方的身份,不论是谁发送过来的请求都会返回响应,因此有可能遭遇伪装攻击,也不能做到抗抵赖

    (3)无法证明报文的完整性,有可能遭遇中间人攻击将内容已篡改。

     

    2.1  HTTPSHTTP的对比优化

    (1)HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的,保证了通信的保密性。当然SSL协议并不能对UDP应用进行保护

    (2)虽然使用 HTTP 协议无法确定通信方,使用 SSL可以。SSL使用了一种被称为证书的手段,证书由值得信任的第三方机构颁发,使用HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。证书用以证明服务器和客户端是实际存在的。身份确认过程使用RSA非对称密钥加密方式(破解难度基于两个大素数乘积的因式分解难度),但是为了提高效率,身份确认完成后使用共商后的对称密钥

    (3)虽然有使用 HTTP 协议确定报文完整性的方法,但事实上并不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。SSL通过消息校验算法增强信息的完整性。

    (4)HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80后者是443

     

    3   SSL

    SSL协议位于TCP/IP协议与各种应用层协议(不止能用于HTTP)之间,为数据通讯提供安全支持。

    SSL协议可分为两层:

    (1)SSL记录协议:建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

    (2)SSL握手协议:建立在记录协议之上,用于数据传输开始前的双方身份认证、协商加密算法、交换加密密钥等。

     

    3.1 SSL身份认证以及密钥交换流程

    SSL的作用我们在2.1中已经介绍过了,那么我们着重介绍SSL协议的工作流程。博主本人是信息安全专业的,密钥交换这方面在考研复试的时候就了解过了,这里进行简述。

    客户向服务器发送一个HTTP请求,服务器在响应客户时返回自己的公钥证书,客户产生一个主密钥(可以加随机数防止对服务器的重放攻击),并将其用服务器的公开密钥加密后传给服务器,服务器用自己的私钥解密恢复出主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。经过认证的服务器发送一个提问给客户,客户则返回用自己私钥加密过的提问以及自己的公钥,从而让服务器认证客户

     

    4.   移动端获取网络数据优化的几个点

    1连接复用,节省连接建立时间,如开启 keep-aliveAndroid中的HttpURLConnectionHttpClient都开启了keep-alive

    2请求合并,如果在某个页面内请求过多,也可以考虑做一定的请求合并。

    3减少请求数据的大小,对于post请求,body可以做gzip压缩,header也可以作数据压缩(不过只支持http 2.0)。返回数据中的body也可以作gzip压缩,body数据体积可以缩小到原来的30%左右。(也可以考虑压缩返回的json数据的key数据的体积,尤其是在返回数据格式变化不大的情况)

    4)根据用户的当前的网络质量来判断下载什么质量的图片


    最后,如果觉得有所收获,请点下面的赞多多支持~谢谢各位

  • 相关阅读:
    ambry集群搭建(无SSL验证的方式)
    接口属性命名不规范的处理方式
    windows下搭建ElasticSearch
    MyBatis-Plus分页插件——PageHelper和IPage原理介绍
    饥荒服务器搭建加mod使用 阿里云服务器 Ubuntu18
    WSL2+Ubuntu20.04桌面功能配置
    设计模式学习总结(Java版)
    Java in 蓝桥杯
    Windows 批处理脚本学习
    Vue风格指南小结
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461472.html
Copyright © 2020-2023  润新知