有关HTTP的知识点
HTTP 中 GET 和 POST 的区别
https://www.w3schools.com/tags/ref_httpmethods.asp
HTTP 协议中的 Chunk 传输
- Chunk传输是一种在HTTP协议1.1版本中定义的数据传输机制,它允许将数据流分成多个不重叠的“块”,并且每个块可以独立地发送和接收,而不需要知道整个数据流的大小或内容。这样可以实现数据的流式传输,而不需要等待数据生成完毕才发送。
- Chunk传输的优点是可以在不知道数据总大小的情况下,动态地生成和发送数据,例如当数据是从数据库查询或其他服务获取的时候。另外,Chunk传输也可以在数据发送完毕后,发送一些额外的头部字段,例如用于数字签名或校验的字段。
- Chunk传输的缺点是需要额外的开销来标识每个块的大小和结束符,以及处理可能出现的错误或异常。另外,Chunk传输也不适用于HTTP/2协议,因为HTTP/2提供了自己更高效的数据流传输机制。
- Chunk传输的格式是:每个块由一个十六进制的数字开头,表示该块的字节数,后面跟着一个回车换行符(\r\n),然后是该块的内容,再后面是另一个回车换行符(\r\n)。最后一个块是一个零长度的块,表示数据传输结束,它只有一个零和两个回车换行符(0\r\n\r\n)。在最后一个块之后,还可以跟随一些可选的头部字段,称为尾部(trailer),用于提供一些额外的元数据。 例如,下面是一个使用Chunk传输的HTTP响应:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
这个响应包含了三个块,分别是“Mozilla”,“Developer”和“Network”,最后一个零长度的块表示结束。如果将所有块的内容拼接起来,就得到了完整的响应主体:“MozillaDeveloperNetwork”。
HTTP 代理服务器是什么?
HTTP 代理服务器是一种代理服务器的类型,它充当客户端和Web服务器之间的中介服务器。它可以用来转发、过滤、缓存、匿名或加密HTTP请求和响应。 例如,如果你想访问一个被墙的网站,你可以通过一个HTTP代理服务器来绕过网络封锁。
HTTP2.0 改进点
- 多路复用:HTTP2.0 允许在一个 TCP 连接上同时发送和接收多个请求和响应,避免了 HTTP1.0 的队头阻塞问题,提高了连接的利用率和传输效率。
- 二进制分帧:HTTP2.0 将所有传输的信息分割为小的帧,并用二进制格式编码,使得报文更容易解析和处理,减少了报文的大小和传输的开销。
- 首部压缩:HTTP2.0 使用 HPACK 算法对首部字段进行压缩,减少了首部的冗余和大小,节省了网络流量。
- 服务端推送:HTTP2.0 允许服务器在客户端请求之前主动发送数据,预加载客户端可能需要的资源,提高了页面的加载速度。
HTTP2.0 需要什么样的浏览器和服务器支持?
- 在浏览器方面,目前主流的浏览器都已经支持 HTTP2.0,包括 Chrome、Firefox、Safari、Edge 等。
- 在服务器方面,目前主流的 Web 服务器也已经支持 HTTP2.0,包括 Apache、Nginx、IIS 等。
- 但是,由于浏览器的限制,如果要使用 HTTP2.0,必须基于 HTTPS 部署,也就是说需要申请和配置 SSL 证书。
HTTP2.0 和 HTTPS 有什么关系?
- HTTP2.0 是 HTTP 协议的下一代版本,它在 HTTP1.1 的基础上,引入了多路复用、二进制分帧、首部压缩、服务端推送等技术,以提高 Web 性能和用户体验。
- HTTPS 是 HTTP 协议的安全版本,它在 HTTP 的基础上,增加了 SSL/TLS 层,以实现传输的加密和身份认证,以保护用户的隐私和安全。
- HTTP2.0 和 HTTPS 并不是必须的关系,HTTP2.0 可以使用明文 HTTP 传输,也可以使用 HTTPS 传输。但是,由于浏览器的限制,目前大多数实现都是基于 HTTPS 的。
- HTTPS 是 HTTP2.0 的一个重要推动力,因为 HTTPS 可以解决 HTTP2.0 的一些兼容性和安全性问题,例如代理服务器的干扰、中间人攻击等。
HTTP2.0 对前端开发有什么影响?
- 由于 HTTP2.0 支持多路复用和服务端推送,一些 HTTP1.0 时代的优化手段,如域名分片、合并文件、内联资源等,可能会失效或适得其反,因此需要重新评估和调整前端的资源加载策略。
- 由于 HTTP2.0 使用二进制分帧和首部压缩,前端可以更好地利用网络带宽,提高页面的加载速度和用户体验。
- 由于 HTTP2.0 需要使用 HTTPS 协议,前端需要考虑 HTTPS 的证书申请、部署和维护,以及 HTTPS 对性能的影响和优化。
HTTP2 有什么间题?
- 兼容性问题:HTTP2.0 需要基于 HTTPS 部署,而 HTTPS 需要申请和配置 SSL 证书,这对于一些小型网站来说可能是一个成本和技术难题。另外,一些老旧的浏览器和服务器可能不支持 HTTP2.0,需要做好降级处理。
- TCP 阻塞问题:HTTP2.0 使用了多路复用技术,将所有请求和响应都通过一个 TCP 连接传输,这样也增加了 TCP 的压力,如果一个 TCP 分组丢失,会导致整个连接阻塞,无法逃避 TCP 的队首阻塞问题。
- 加密开销问题:HTTP2.0 由于使用了 HTTPS 协议,虽然提高了安全性,但也增加了加密和解密的开销,对于 CPU 和内存的消耗会更大。
HTTP3 是什么?
HTTP3 是 HTTP 协议的第三个主要版本,它是在 HTTP2 的基础上,引入了 QUIC 协议作为传输层,以提高 Web 性能和用户体验。
HTTP3 与 HTTP2 相比,有以下几个主要的改进点:
- 使用 QUIC 协议代替 TCP 协议,实现了无序、并发的字节流传输,解决了 TCP 的队头阻塞问题,提高了多路复用的效率;
- 使用 UDP 协议代替 TCP 协议,实现了连接迁移功能,支持 IP 地址的变化,适应移动网络的环境;
- 使用 QPACK 算法代替 HPACK 算法,对 HTTP 头部进行压缩,减少了头部的大小和传输的开销;
- 使用 TLS 1.3 协议代替 TLS 1.2 协议,实现了更快速、更安全的加密通信,降低了建立连接的时延。
HTTP3 中的 QUIC 协议
QUIC 协议是一种基于 UDP 的传输层协议,由 Google 自研并提交给 IETF 标准化,目的是为了提高 Web 性能和用户体验。
QUIC 协议的主要特点有:
- 支持 0-RTT 握手,通过缓存服务器的配置信息,实现快速建立连接和发送数据;
- 支持连接迁移,通过使用连接 ID 而不是 IP 地址来标识连接,实现在 IP 地址变化时保持连接不断开;
- 支持多路复用,通过使用 QUIC Stream 来传输多个数据流,实现无序、并发的字节流传输,解决 TCP 的队头阻塞问题;
- 支持可靠传输,通过使用包号和确认应答机制,实现数据包的重传和排序;
- 支持前向安全,通过使用 ECDH 算法和会话密钥,实现每次会话的通信密钥不同,保证通信数据的安全性;
- 支持拥塞控制,通过使用类似 TCP New RENO 的算法或基于带宽检测的算法(例如 BBR),实现网络拥塞时的流量控制。
HTTPS加密
HTTPS 加密是一种保护网站和浏览器之间通信安全的协议,它基于 HTTP 协议,但是使用了 SSL/TLS 技术来加密数据。
HTTPS 加密的过程大致如下:
- 浏览器向网站服务器发送一个请求,要求建立 HTTPS 连接。
- 服务器向浏览器发送一个数字证书,证书中包含了服务器的公钥和一些身份信息,证书由一个可信的第三方机构(CA)颁发和签名。
- 浏览器验证证书的有效性和真实性,如果通过,就生成一个用于对称加密的随机密钥,并用服务器的公钥加密后发送给服务器。
- 服务器用自己的私钥解密得到对称加密的密钥,然后用该密钥加密要传输的数据,并发送给浏览器。
- 浏览器用相同的对称加密密钥解密得到数据,并显示在页面上。 这样,HTTPS 加密就实现了数据在传输过程中的保密性、完整性和身份认证。