HTTP之常见问答

1:HTTP/1.1 如何优化?

:尽量避免发送 HTTP 请求;通过缓存技术,使用请求的 Etag 参数来处理判断缓存过期等问题,类似304状态码就是告诉客户端,缓存有效还能继续使用

:在需要发送 HTTP 请求时,考虑如何减少请求次数;减少重定向请求次数(使用代理服务器,如nginx)、合并请求、延迟发送请求按需访问资源

:减少服务器的 HTTP 响应的数据大小(无损压缩、有损压缩);
2:HTTPS RSA算法 握手解析 (使用 RSA 密钥协商算法的最大问题是不支持前向保密)HTTPS ECDHE算法支持前向保密

而且可以在第三次握手之后,就发送加密应用数据,节省了 1 RTT
3:HTTPS 如何优化? 分析性能损耗

硬件优化 选择支持 AES-NI 特性的 CPU 这个特性可以在硬件级别优化 AES 对称加密算法,加快应用数据的加解密

软件优化 把软件升级成较新的版本,比如将 Linux 内核 2.X 升级成 4.X,将 openssl 1.0.1 升级到 1.1.1,因为新版本的软件不仅会提供新的特性,而且还会修复老版本的问题

会话复用 Session ID 和 Session Ticket,再次重连 HTTPS 时,只需要 1 RTT 就可以恢复会话,TLS1.3 使用 Pre-shared Key 会话重用技术,只需要 0 RTT 就可以恢复会话

这些会话重用技术虽然好用,但是存在一定的安全风险,它们不仅不具备前向安全,而且有重放攻击的风险,所以应当对会话密钥设定一个合理的过期时间

协议优化 密钥交换算法应该选择 ECDHE 算法、 将 TLS1.2 升级 TLS1.3,因为 TLS1.3 的握手过程只需要 1 RTT,而且安全性更强

证书优化 选用 ECDSA 证书,而非 RSA 证书,因为在相同安全级别下,ECC 的密钥长度比 RSA 短很多,这样可以提高证书传输的效率
4:既然有 HTTP 协议,为什么还要有 RPC?

总结

:纯裸 TCP 是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP 和各类 RPC 协议就是在 TCP 之上定义的应用层协议。

:RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。

:从发展历史来说,HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了,B/S 和 C/S 在慢慢融合。很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 协议进行通讯。

:RPC 其实比 HTTP 出现的要早,且比目前主流的 HTTP/1.1 性能要更好,所以大部分公司内部都还在使用 RPC。

:HTTP/2.0 在 HTTP/1.1 的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。
5:既然有 HTTP 协议,为什么还要有 WebSocket?

总结

:TCP 协议本身是全双工的,但我们最常用的 HTTP/1.1,虽然是基于 TCP 的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的 WebSocket 协议。

:在 HTTP/1.1 里,只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。

:对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用 WebSocket 协议。

:WebSocket 和 socket 几乎没有任何关系,只是叫法相似。

:正因为各个浏览器都支持 HTTP协 议,所以 WebSocket 会先利用HTTP协议加上一些特殊的 header 头进行握手升级操作,升级成功后就跟 HTTP 没有任何关系了,之后就用 WebSocket 的数据格式进行收发数据。
6:网络粘包的"问题"

网络粘包问题是指在数据传输过程中,发送方将多个数据包连续发送到接收方,接收方在接收到数据时,可能会将多个数据包合并在一起接收,导致数据的解析出现错误。这种问题通常发生在TCP传输协议中,因为TCP是面向连接的协议,发送方和接收方之间会维护一个数据传输的连接。

造成网络粘包问题的原因有多种,其中包括网络延迟、数据发送速率过快、接收方处理数据的速度跟不上等。在数据发送方发送连续的数据包时,由于网络延迟或其他原因,接收方可能无法及时接收到所有数据包,从而导致数据包的累积。当接收方接收到数据时,会将多个数据包合并在一起进行处理,这就造成了网络粘包问题。

网络粘包问题会影响数据的解析和处理,可能导致接收方无法正确理解发送方发送的数据。为了解决网络粘包问题,可以使用一些方法,比如在数据包中添加消息长度信息,接收方根据长度信息对数据包进行解析;或者使用特定的分隔符来分割数据包,接收方根据分隔符来拆分数据包。

总之,网络粘包问题是在数据传输过程中可能出现的一种问题,会影响数据传输的正确性和可靠性。需要通过合适的方法和技术来解决这个问题。

相关推荐
一只游鱼1 分钟前
webSocket快速入门
网络·websocket·网络协议
努力的小郑3 小时前
有了TCP为什么还需要HTTP?再用RPC?这次彻底讲明白了
http·微服务·rpc
AALoveTouch3 小时前
大麦网抢票:基于Wireshark协议分析
网络·测试工具·wireshark
爱奥尼欧3 小时前
【Linux笔记】网络部分——socket 编程 TCP实现多台虚拟机使用指令访问云服务器
linux·服务器·网络
luopandeng4 小时前
amd npt技术 对比 intel ept 技术
java·linux·网络
迎風吹頭髮4 小时前
UNIX下C语言编程与实践60-UNIX TCP 套接字关闭:close 与 shutdown 函数的区别与使用场景
c语言·网络·unix
梁辰兴4 小时前
计算机操作系统:进程同步
网络·缓存·操作系统·进程·进程同步·计算机操作系统
hazy1k5 小时前
K230基础-录放视频
网络·人工智能·stm32·单片机·嵌入式硬件·音视频·k230
AORO20255 小时前
适合户外探险、物流、应急、工业,五款三防智能手机深度解析
网络·人工智能·5g·智能手机·制造·信息与通信
white-persist6 小时前
XXE 注入漏洞全解析:从原理到实战
开发语言·前端·网络·安全·web安全·网络安全·信息可视化