HTTP基础知识总结

历时两个月,读完了《图解HTTP》和《图解TCP/IP》,上周在组内给大家分享了关于HTTP的基础知识《HTTP基础知识知多少》。准备课件的过程中是忐忑和焦虑的,分享的过程中是略微紧张的,但是分享之后的感觉是爽歪歪的。建议大家坚持分享,坚持写作。

关于HTTP,主要有以下知识点:
1.弄清楚概念之间的关系:HTTP、HTTPS、HTTP2、SPDY、SSL/TLS
2.HTTP Header的作用
3.证书的来龙去脉
4.HTTP2的优越性

一、概念之间的关系:
HTTP基础知识总结_第1张图片

HTTP的瓶颈:
1.一条连接上只可发送一个请求
2.请求只能从客户端开始,客户端不可以接收除响应以外的指令
3.请求/响应首部未经压缩就发送
4.可任意选择数据压缩格式,非强制压缩发送

HTTP性能的拯救者–SPDY、HTTP2、WebSocket:
一、使用SPDY后,HTTP获得的额外功能:
1.多路复用,但是是单域名的多路复用
2.赋予请求优先级
3.压缩HTTP头部 请求和响应的头部都压缩
4.推送功能
二、HTTP2基于SPDY,区别在于:
1.HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 SSL
2.HTTP2.0 消息头的压缩算法采用 HPACK,而SPDY 采用的是 DEFLATE

HTTP安全的拯救者–HTTPS:
1.HTTPS = HTTP + 加密 + 认证 + 完整性保护
2.HTTPS是身披SSL外壳的HTTP
3.SSL是独立于HTTP的协议,是当今应用最为广泛的网络安全技术
4.SSL vs TLS:
SSL:Secure Socket Layer,安全套接层,最初由网景通信公司倡导,主导权交由IETF手中后,IETF以SSL3.0为准,后又制定了TLS。
TLS:Transport Layer Security,安全传输层协议
当前主流的版本是SSL3.0和TLS1.0。

如果将SPDY看做HTTP2.0的代言人,SSL看做HTTPS的代言人的话,它们之间的关系是这样的:
HTTP基础知识总结_第2张图片
从图中可以看到,不管是从性能还是安全性方面的优化,SPDY和SSL都没有改变HTTP现有的协议实现(为了兼容和普及,其实也不可能去改变)。

二、HTTP Header的作用:
1.从协议层面提供缓存策略
2.与提升速率相关的一些配置
2.1 gzip压缩 支持内容压缩
2.2 Range 支持断点续传
3.其他特殊作用
3.1 multipart 支持多类型内容组合发送
3.2 Keep-Alive 支持长连接
3.3 Host 支持虚拟主机技术
3.4 Referer 记录请求发起的源头页面

HTTP的缓存机制:
HTTP基础知识总结_第3张图片
其中对“过期”的判断依据是:
HTTP基础知识总结_第4张图片

详见:RFC2616

HTTPS的安全通信机制:
在TCP三次握手之后,开始HTTPS的握手协商:
HTTP基础知识总结_第5张图片
step1:客户端生成随机串1,将其与加密套件一起发送给服务端;
step2:服务端生成随机串2,并且从加密套件中选出非对称加密、对称加密和完整性计算的具体算法,然后将随机串2和算法挑选结果发送给客户端;
step3:服务端将自己的证书下发给客户端;
step5:客户端在验证服务端证书可信有效的前提下,生成随机串3,然后根据三个随机串以及对称加密的算法,生成对称加密的秘钥。然后从证书中读取非对称加密的公钥,将对称加密的秘钥进行加密,最后发送给服务端。
step6:客户端对对称秘钥以及完整性算法进行测试,使用其加密一些内容后,发送给服务端;
step8:服务端收到客户端发来的密文后,使用保存在本地的非对称加密的私钥,从step5报文中解密出对称加密的秘钥。然后使用这个对称加密的秘钥以及完整性算法,对step6报文中的报文内容进行解密和验证。如果验证OK,则使用相同办法给客户端也发送测试报文进行测试。
step10:客户端在验证step8中服务端发来的报文正确完整的情况下,开始正式传输通信的内容。
step12:通信结束时,由客户端发送close notify报文来断开连接。
此后会进入TCP的四次挥手阶段。

SSL的加密及完整性保护:
1.通信线路的加密:SSL或TLS将整个通信线路进行了加密,使用的非对称加密对通信线路进行加密。
2.通信内容的加密:对报文主体进行加密
3.完整性保护:MAC(Message Authentication Code)报文摘要
4.常用的的加密算法:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
非对称加密的作用就是护送对称加密秘钥给服务端。
同一种加密算法,位数越长就越难破解。

SSL的认证:
1.通过证书来确保:某个站点确实就是某个站点。
2.证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
3.要获取HTTPS证书,请执行以下步骤:
步骤1:创建私钥和证书签名请求(CSR)
步骤2:获取HTTPS证书
步骤3:证书配置在Server端
4.签发机构
自我签发、CA(Certificate Authority)机构签发
5.证书类型
单域名版、多域名版、泛域名证书/通配符证书
5.验证等级(查看区别)
域名验证型(DV)、企业验证型(OV)、增强验证型(EV)

Client端如何验证证书的有效性:
1.根证书、证书信任链
根证书不需要被证明
除了根证书,其它证书都要依靠上一级的证书,来证明自己。

2.SSL证书验证失败有以下三点原因:
SSL证书不是由受信任的CA机构颁发的
证书过期
访问的网站域名与证书绑定的域名不一致

3.系统会默认安装一些根证书:
DOS窗口里运行“certmgr.msc”
安卓手机默认安装的根证书(设置->安全->受信任的凭证)

4.目前58APP是如何支持Https的?
答:使用的是OkHttp默认的验证。即通过系统预装的根证书,验证服务端证书颁发机构的合法性,然后验证证书里注册的域名信息是否与客户端请求的域名一致。

5.抓包工具为什么能明文显示HTTPS的内容?
答:抓包工具此时是代理服务器以及中间人的角色。客户端在安装了抓包工具的证书后,就相当于信任了抓包工具的根证书。这样,在进行HTTPS通信时,客户端在收到抓包工具下发的证书时(即step3)就认为抓包工具是合法的对端。

HTTP2的多路复用:
1.复用的是什么
答:复用的是tcp握手挥手、https握手协商阶段。直接进入到报文内容加密传输阶段。
2.HTTP1.1的HTTP Pipelining,线头阻塞(Head ofline blocking)、管道化只能利用已存在的keep-alive连接,仅适用于GET和HEAD请求
3.一些概念:
Stream、Frame
HTTP2的每次应用请求,都被看做一个Stream,每个Stream的报文内容按照Frame的方式进行分类和切割。
4.并发数
HTTP2的复用是并发的,这是它与HTTP1.1的不同之处。同一个tcp connect上,可以并发交叉传输多个Stream。

TLS 的扩展配置:
1.SNI、session tickets
SNI:Server Name Indication,服务器名称指示,允许一个IP地址上多个域名安装多张证书。
session ID:用于恢复被中断的会话。目前所有浏览器都支持的方法
session tickets:针对session ID只保留在一台服务器上的缺点而生
2.协议协商
HTTP 1.1的Upgrade
ALPN:Application Layer Protocol Negotiation,上层协议协商,就是在握手过程中,标明TLS里面是什么协议,例如 http2就是 h2c。由客户端给服务器发送一个协议清单,由服务器来最终选择一个。
NPN:Next Protocol Negotiation,随着SPDY 被HTTP/2 取代,NPN 也被修订为ALPN

你可能感兴趣的:(App开发)