灵活可扩展

这可以说是 HTTP 最重要的特点,也是HTTP能大行其道并碾压其他协议称霸于世的根本原因!它只规定了报文的基本格式,用空格分隔单词,用换行分隔字段,「header+body」等基本语义

但在语法层面并不做限制,它并没有强制规定header里应该传什么,也没有限制它底层应该用什么传输,这也为HTTPS添加SSL/TLS层来加密传输,HTTP2使用帧,流来进行多路复用,HTTP3使用UDP彻底解决解决队头阻塞问题提供了可能!后续如果又出现了牛逼的协议,底层也随时可以替换

可靠传���

不管底层是 TCP 还是QUIC(底层使用UDP),它们的传输都是可靠的,都能保证应用层请求响应的可靠传输,这一点很重要,不然传输过程中缺胳膊少腿,应用层就无法解析了。

应用层协议

HTTP 是一个协议,很多人把 HTTP 和 TCP 混在了一起

  • TCP 相当于高速公路,为我们提供了可靠的传输通道
  • HTTP 规定货物的表现形式(header + 空行+ body)

货物是否可从中间站运回(缓存机制)高速公路是否应该关闭(连接控制),至于货物如何可靠传输到目的地,那是 TCP 的事,与 HTTP 无关

请求应答模式

HTTP 需要请求方发起请示,然后应答方对此作出响应,应答方不会无缘无故地发响应给请求方

另外请求和应答方的角色是可以互换的

无状态

HTTP 的每个请求-应答都是无关的,即每次的收发报文都是完全独立,没有任何联系的,服务器收到每个请求响应后,不会记录这个请求的任何信息

  • Session 可以认为是 Server 用来追踪每个用户行为的一个会话
  • server 会给每个用户分配一个这个 Session 的 Cookie
  • 通过 Cookie 这个头字段返回给 client
  • 之后 client 每次请求都会在 Cookie 里带上这个sessionId,server 拿到 sessionId 之后就知道是哪个用户发起的了

image.png