引用自:https://www.cnblogs.com/jsersudo/p/10341036.htmljavascript
Http和Https属于计算机网络范畴,但做为开发人员,无论是后台开发或是前台开发,都颇有必要掌握它们。
在学习Http和Https的过程当中,主要是参考了阮一峰老师的博客,讲的很全面,而且通俗易懂,有兴趣的同窗能够去学习学习。
这篇文章主要是按照本身的思路来说解对Http和Https的理解。文章将会从如下几个方面介绍。html
目录树(暂时还不知道简书编辑器怎么经过目录树进行页面内跳转,哪位同窗知道但愿不吝告知):java
从目录结构能够看出,每一个标题展开来讲都是一个很大的主题。但本文旨在让各位同窗对Http和Https相关知识有一个全面的认知,不会太过深刻探讨各个主题,有兴趣的同窗能够进行针对性研究。nginx
网络结构有两种主流的分层方式:OSI七层模型和TCP/IP四层模型。算法
OSI是指Open System Interconnect,意为开放式系统互联。
TCP/IP是指传输控制协议/网间协议,是目前世界上应用最广的协议。json
OSI层 | 对应TCP/IP层 | OSI各层功能 | 网络协议 | 设备 |
---|---|---|---|---|
应用层 | 应用层 | 应用程序(电子邮件,文件服务),用户接口 | HTTP,FTP,TFTP,NFS | 网关 |
表示层 | 应用层 | 数据的表示,压缩和加密(数据格式化,代码转换,数据加密) | TELNET,SNMP | 网关 |
会话层 | 应用层 | 创建、管理和终止会话 | SMTP,DNS | 网关 |
传输层 | 传输层 | 提供端到端可靠报文段传递和错误恢复 | TCP,UDP | 网关 |
网络层 | 网际互联层 | 提供数据包从源到宿的传递和网际交互 | IP,ICMP,ARP,RARP,UUCP | 路由器 |
链路层 | 网络接口层 | 将比特组装成帧和点到点传递 | FDDI,SLIP,PPP,PDN | 交换机 |
物理层 | 网络接口层 | 传输比特流,以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 | 集线器,中继器 |
Http是基于TCP/IP协议的应用程序协议,不包括数据包的传输,主要规定了客户端和服务器的通讯格式,默认使用80端口。浏览器
a
. 引入持久链接,TCP默认不关闭,可被多个请求复用,对于一个域名,多数浏览器容许同时创建6个持久链接。b
. 引入管道机制,即在同一个TCP链接中,能够同时发送多个请求,不过服务器仍是按顺序响应。c
. 在头部加入Content-Length字段,一个TCP能够同时传送多个响应,因此就须要该字段来区分哪些内容属于哪一个响应。d
. 分块传输编码,对于耗时的动态操做,用流模式取代缓存模式,即产生一块数据,就发送一块数据。e
. 增长了许多命令,头信息增长Host来指定服务器域名,能够访问一台服务器上的不一样网站。Request格式:缓存
GET /barite/account/stock/groups HTTP/1.1 QUARTZ-SESSION: MC4xMDQ0NjA3NTI0Mzc0MjAyNg.VPXuA8rxTghcZlRCfiAwZlAIdCA DEVICE-TYPE: ANDROID API-VERSION: 15 Host: shitouji.bluestonehk.com Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.10.0
Response格式:安全
HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Mon, 15 Oct 2018 03:30:28 GMT Content-Type: application/json;charset=UTF-8 Pragma: no-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Encoding: gzip Transfer-Encoding: chunked Proxy-Connection: Keep-alive {"errno":0,"dialogInfo":null,"body":{"list":[{"flag":2,"group_id":1557,"group_name":"港股","count":1},{"flag":3,"group_id":1558,"group_name":"美股","count":7},{"flag":1,"group_id":1556,"group_name":"所有","count":8}]},"message":"success"}
说明一下请求头和响应头的部分字段:服务器
Host
:指定服务器域名,可用来区分访问一个服务器上的不一样服务Connection
:keep-alive
表示要求服务器不要关闭TCP链接,close
表示明确要求关闭链接,默认值是keep-aliveAccept-Encoding
:说明本身能够接收的压缩方式User-Agent
:用户代理,是服务器能识别客户端的操做系统(Android、IOS、WEB)及相关的信息。做用是帮助服务器区分客户端,而且针对不一样客户端让用户看到不一样数据,作不一样操做。Content-Type
:服务器告诉客户端数据的格式,常见的值有text/plain,image/jpeg,image/png,video/mp4,application/json,application/zip
。这些数据类型总称为MIME TYPE
。Content-Encoding
:服务器数据压缩方式Transfer-Encoding
:chunked
表示采用分块传输编码,有该字段则无需使用Content-Length
字段。Content-Length
:声明数据的长度,请求和回应头部均可以使用该字段。Http和Https协议请求时都会经过Tcp三次握手创建Tcp链接。那么,三次握手是指什么呢?
那么,为何必定要三次握手呢,一次能够吗?两次能够吗?带着这些问题,咱们来分析一下为何必须是三次握手。
经过三次握手,A和B都能确认本身和对方的收发信能力,至关于创建了互相的信任,就能够开始通讯了。
下面,咱们介绍一下三次握手具体发送的内容,用一张图描述以下:
首先,介绍一下几个概念:
ACK
:响应标识,1表示响应,链接创建成功以后,全部报文段ACK的值都为1SYN
:链接标识,1表示创建链接,链接请求和链接接受报文段SYN=1,其余状况都是0FIN
:关闭链接标识,1标识关闭链接,关闭请求和关闭接受报文段FIN=1,其余状况都是0,跟SYN相似seq number
:序号,一个随机数X,请求报文段中会有该字段,响应报文段没有ack number
:应答号,值为请求seq+1,即X+1,除了链接请求和链接接受响应报文段没有该字段,其余的报文段都有该字段知道了上面几个概念后,看一下三次握手的具体流程:
从图中能够看出,创建链接经历了三次握手,当数据传输完毕,须要断开链接,而断开链接经历了四次挥手:
下面是Tcp报文段首部格式图,对于理解Tcp协议很重要:
Https协议是以安全为目标的Http通道,简单来讲就是Http的安全版。主要是在Http下加入SSL层(如今主流的是SLL/TLS),SSL是Https协议的安全基础。Https默认端口号为443。
前面介绍了Http协议,各位同窗能说出Http存在的风险吗?
SSL/TLS协议就是为了解决这些风险而设计,但愿达到:
下面主要介绍SSL/TLS协议。
SSL/TLS协议基本思路是采用公钥加密法(最有名的是RSA加密算法)。大概流程是,客户端向服务器索要公钥,而后用公钥加密信息,服务器收到密文,用本身的私钥解密。
为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提升效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度很是快。而公钥用来机密对话秘钥。
下面用一张图表示SSL加密传输过程:
详细介绍一下图中过程:
上面提到了,Https协议中须要使用到SSL证书。
SSL证书是一个二进制文件,里面包含通过认证的网站公钥和一些元数据,须要从经销商购买。
证书有不少类型,按认证级别分类:
EV证书浏览器地址栏样式:
OV证书浏览器地址栏样式:
DV证书浏览器样式:
按覆盖范围分类:
认证级别越高,覆盖范围越广的证书,价格越贵。也有免费的证书,为了推广Https,电子前哨基金会成立了Let's Encrypt提供免费证书。
证书的经销商也不少,知名度比较高的有亚洲诚信(Trust Asia)。
加密算法分为对称加密、非对称加密和Hash加密算法。
对称加密算法加解密效率高,速度快,适合大数据量加解密。常见的堆成加密算法有DES、AES、RC五、Blowfish、IDEA
非对称加密算法复杂,加解密速度慢,但安全性高,通常与对称加密结合使用(对称加密通讯内容,非对称加密对称秘钥)。常见的非对称加密算法有RSA、DH、DSA、ECC
Hash算法特性是:输入值同样,通过哈希函数获得相同的散列值,但并不是散列值相同则输入值也相同。常见的Hash加密算法有MD五、SHA-一、SHA-X系列
下面着重介绍一下RSA算法和DH算法。
Https协议就是使用RSA加密算法,能够说RSA加密算法是宇宙中最重要的加密算法。
RSA算法用到一些数论知识,包括互质关系,欧拉函数,欧拉定理。此处不具体介绍加密的过程,若是有兴趣,能够参照RSA算法加密过程。
RSA算法的安全保障基于大数分解问题,目前破解过的最大秘钥是700+位,也就表明1024位秘钥和2048位秘钥能够认为绝对安全。
大数分解主要难点在于计算能力,若是将来计算能力有了质的提高,那么这些秘钥也是有可能被破解的。
DH也是一种非对称加密算法,DH加密算法过程。
DH算法的安全保障是基于离散对数问题。
Http和Https的区别以下: