HTTP是什么?
http就是超文本传输协议,是一个简单的「请求-应答」模式的通讯协议,基于TCP传输协议之上。
工作原理:
因为TCP是可靠连接,所以在实现通讯之前,需要先在客户端和服务器之间建立稳定的TCP链接,然后再通过HTTP发送请求,服务端收到请求后做出应答返回响应,这样就完成了「请求-应答」这一流程,随后TCP连接就会断开,至此一次完整的HTTP传输就此完成。
http传输协议特点:
- 简单、灵活、易于拓展,报文没有过多限制,可以传输多种格式数据例如视频,图片,压缩包等。
- 可靠,HTTP基于TCP传输协议,是一个可靠的传输。
- 无状态,浏览器不用记录任何信息,每次请求都是从建立连接开始。可以减轻服务器负担。
- 万能的应用层协议
http传输协议缺点:
- 明文传输,不安全。
- 因为是无状态模式,所以在处理连续步骤时,需要多次发送请求,目前解决的办法是引入cookie。
- 性能不太高,「请求-应答」的模式加长了请求头的长度,这就是著名的“队头阻塞”(Head-of-line blocking), 当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户 端迟迟收不到数据。
HTTP短链接:
采用上述「请求-应答」模式的HTTP请求的方式,我们称为HTTP短连接,就是每次都是先建立TCP连接——》客户端请求——》服务器响应——》断开连接,这样效率太低了,每次建立连接只能服务一次资源请求。
HTTP长连接:
HTTP长连接依赖于TCP的长连接,长连接的特点是,只要任意一端没有明确提出断开连接,就一直保持TCP的连接状态。
如何建立HTTP长连接?
只需要在请求头中添加:
Connection: Keep-Alive
那么在服务器响应的时候也会在响应头中添加:
Connection: Keep-Alive
这样客户端和浏览器端就会建立一个长连接,当客户端在发送另外一个请求时就会使用这个建立好的连接,这个长连接会一直保持到客户端或者是浏览器一方提出断开请求。
如何关闭HTTP长连接?
只需要在请求头中添加:
Connection: close
此外在HTTP1.1开始,请求头中就默认开启了keep-Alive
虽然长连接可以减少TCP建立连接的开销,但是一直保持连接也需要消耗服务器资源,那么在开启长连接后,又没有其他请求,这个时候就会适得其反,所以这时候我们需要配置keepalive_timeout参数,去指定HTTP长连接的超时时间,设置这个参数后web服务器就会启动一个定时器,当在规定的时间内没有新的请求时,就会触发回调函数来释放连接。
HTTPS是什么?
HTTPS 是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。
- 数据保密性:保证数据内容在传输的过程中不会被第三方查看。
- 数据完整性:能及时发现被第三方篡改的传输内容。
- 身份校验安全性:能保证数据到达用户期望的目的地。
它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
HTTPS请求流程
https作为一种安全的应用层协议,使用了以下三种加密手段:
- 对称加密,私钥加密,信息的发送方和接收方使用同一个密钥加密和解密数据。
- 非对称加密,生成两把密钥公钥和私钥。私钥自己保存,公钥用于公开。可以用公钥和私钥中任何一个进行加密,另一个解密。
- 数字签名,为了表明信息没有收到伪造,确实是信息拥有者发出。可以使用数字签名。
数据正文数据量较大,适用于对称加密,因为对称加密速度快,适用于大量数据加密,但是安全级别低,密钥在网络中传输的过程中容易被窃取,所以对这个密钥进行非对称加密。最后由于非对称加密的公钥在网络中传输,保证接收方接收到正确的公钥,使用证书验证:
1、客户端发送HTTPS请求。
2、服务器收到请求后,返回数字证书(数字签名+公钥)。
3、客户端验证证书是否合法(用服务端的公钥验签),不合法则提示警告。
4、验证合法后,本地生成密钥(后面服务器会根据这个密钥把返回数据进行对称加密)并用服务端在上一阶段中提供的公钥进行非对称加密后发送给服务端。
5、服务端用自己的私钥对数据解密,得到客户端本地生成的密钥(对称加密密钥),再用客户端密钥对要发送的数据进行加密后发给客户端。
HTTPS优点:
1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器; 2、HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安 全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。 HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
HTTPS缺点:
1、相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。 此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。 2、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用 3、最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中 间人攻击一样可行。 3、成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议 加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务 器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云 计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升, 其投入成本已经下降到可接受程度。
webSocket是什么?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要
完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
WebSocket的使用场景 以及优点
- 社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天
- 基于位置的应用、在线教育、智能家居等需要高实时的场景
优点
- 更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
- 较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。
- 可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
- 更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。
- 保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)
WebSocket和Http的关系和异同点
每个WebSocket连接都始于一个HTTP请求。 具体来说,WebSocket协议在第一次握手连接时,通过HTTP协议在传送WebSocket支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端.
Upgrade首部,用来把当前的HTTP请求升级到WebSocket协议,这是HTTP协议本身的内容,是为了扩展支持其他的通讯协议。
相同点:
- 都是建立在TCP之上,通过TCP协议来传输数据。
- 都是可靠性传输协议。
- 都是应用层协议。
不同点:
- WebSocket是双向通信协议,HTTP是单向协议
参考资料: