菜鸡每日一面系列打卡39天
每天一道面试题目
助力小伙伴轻松拿offer
坚持就是胜利,我们一起努力!
题目描述
HTTP和HTTPS有什么区别?
题目分析
HTTP和HTTPS的区别是面试过程中经常被问到的问题之一,其出场频率甚至不亚于上一篇所提到的Cookie和Session的区别与联系。
闲话少说,接下来,随菜鸡一起去看看吧!
题目解答
HTTP(HyperText Transfer Protocol)
HTTPS(Hypertext Transfer Protocol Secure)
从名字就可以看出,二者直接的差别就在于Secure。
换句话说,HTTPS是安全的HTTP。
HTTP和HTTPS的具体差别表现在以下方面:
-
HTTP是明文传输,数据未经过加密,客户端与服务器之间无法进行身份验证,安全性较差,HTTPS(HTTP + TLS)数据传输过程是加密的,客户端与服务器之间可以进行身份验证,安全性较好。
-
HTTP不需要证书,HTTPS需要证书。
-
HTTP直接面向TCP,使用TCP三次握手建立连接,而HTTPS直接面向TLS,通过TLS进行安全性验证,然后TLS面向TCP,这使得HTTP页面响应速度比HTTPS快。
-
同样的原因,HTTPS比HTTP更加耗费资源。
这里有很关键的一点,就是上文提到的TLS。这是HTTPS提升安全性的关键。小伙伴们可能听得更多的是SSL。二者的关系如下:
-
SSL(Secure Socket Layer)安全套接层。
-
TLS(Transport Layer Security)传输层安全性协议,是基于SSL3.0设计的协议。
TLS实现安全性的机制涉及到了密码学的一些基础知识,它采用了RSA握手和密钥交换来进行实现。
具体而言握手阶段涉及四次通信,握手阶段的所有通信都是明文的。(以下内容参考自阮一峰老师的博客)
-
客户端发出请求(ClientHello),客户端先向服务器发出ClientHello请求,主要向服务端提供以下信息:
-
支持的加密通信协议版本
-
随机数A(客户端生成)
-
支持的加密方法
-
支持的压缩方法
-
-
服务端回应(SeverHello),服务端向客户端发出SeverHello回应,包含以下信息:
-
确认使用的加密通信协议版本
-
随机数B(服务端生成)
-
确认使用的加密方法
-
服务端证书
-
-
客户端回应,客户端验证服务端证书。如果验证未通过,则会向访问者发出警告。否则,客户端从证书中取出服务端的公钥。然后向服务端发送以下信息:
-
经过服务端公钥加密的随机数C
-
编码改变通知
-
客户端握手结束通知(通信参数的hash值,可供服务端校验)
-
-
服务器的最后回应,服务器生成会话密钥。然后,向客户端发送以下信息:
-
编码改变通知
-
服务器握手结束通知(通信参数的hash值,可供客户端校验)
-
TLS握手过程至此结束,后续将通过会话密钥进行加密通信。
以上便是菜鸡对HTTP和HTTPS之间区别的一些总结,供大家参考。
相关链接
字节跳动面试最爱问的Cookie和Session,到底有什么区别?
参考资料
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
学习 | 工作 | 分享
长按关注“有理想的菜鸡”
只有你想不到,没有你学不到