HTTP相关笔记

68 阅读4分钟

超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端 - 服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于 TCP/IP 层,但它可以在任何可靠的传输层上使用,也就是说,该协议不会像 UDP 那样静默的丢失消息。RUDP——作为 UDP 的可靠化升级版本——是一种合适的替代选择。

HTTP报文

有两种 HTTP 报文的类型,请求与响应,每种都有其特定的格式。 请求报文例子如下图所示:

image.png

请求由以下元素组成:

  • 一个 HTTP 的请求方法,常用get(获取资源)、post(发送html表单)、options等。
  • 要获取的资源的路径,通常是上下文中就很明显的元素资源的 URL,它没有 protocolhttp://),domaindeveloper.mozilla.org),或是 TCP 的 port (en-US)(HTTP 一般在 80 端口)。
  • HTTP 协议版本号。
  • 为服务端表达其他信息的可选标头
  • 对于一些像 POST 这样的方法,报文的主体(body)就包含了发送的资源,这与响应报文的主体类似。

响应报文如下图所示:

image.png

响应报文包含了下面的元素:

  • HTTP 协议版本号。
  • 一个状态码(状态码(status code)),来告知对应请求执行成功或失败,以及失败的原因。
  • 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
  • HTTP 标头,与请求标头类似。
  • 可选项,比起请求报文,响应报文中更常见地包含获取资源的主体。

HTTP/1.1、HTTP/2与HTTP/3

1、HTTP/2 在 HTTP/1.1 有几处基本的不同:

  • HTTP/2 是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
  • 这是一个多路复用协议。并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。
  • 压缩了标头。因为标头在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  • 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。

2、HTTP/3——基于 QUIC 的 HTTP

QUIC 旨在为 HTTP 连接设计更低的延迟。类似于 HTTP/2,它是一个多路复用协议,但是 HTTP/2 通过单个 TCP 连接运行,所以在 TCP 层处理的数据包丢失检测和重传可以阻止所有流。QUIC 通过 UDP 运行多个流,并为每个流独立实现数据包丢失检测和重传,因此如果发生错误,只有该数据包中包含数据的流才会被阻止。很多主流浏览器(Chrome 和 Edge和 Firefox)均支持HTTP/3。

HTTP cookies

Cookie 的生命周期可以通过两种方式定义:

  • 会话期 Cookie 会在当前的会话结束之后删除。浏览器定义了“当前会话”结束的时间,一些浏览器重启时会使用会话恢复。这可能导致会话 cookie 无限延长。
  • 持久性 Cookie 在过期时间(Expires)指定的日期或有效期(Max-Age)指定的一段时间后被删除。

浏览器的其他存储方式:sessionStorage: 为每一个给定的源(given origin)维持一个独立的存储区域,该存储区域在页面会话期间可用(即只要浏览器处于打开状态,包括页面重新加载和恢复)。 localStorage: 同样的功能,但是在浏览器关闭,然后重新打开后数据仍然存在。

存储大小对比: Cookies:浏览器均支持,容量为4KB, LocalStorage:HTML5,容量为5M, SesstionStorage:HTML5,容量为5M。