HTTP框架修炼之道:走进HTTP协议 | 青训营

84 阅读4分钟

一、HTTP协议简介

HTTP 协议定义了浏览器怎么向万维网服务器请求文档,以及服务器如何把文档传送给浏览器。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议 HTTP

定义:

一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。

  • 无状态”有什么好处呢?

(1)因为服务器没有“记忆能力”,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些,而且还能减轻服务器的负担,能够把更多的 CPU和内存用来对外提供服务。

(2)“无状态”也表示服务器都是相同的,没有“状态”的差异,所以可以很容易地组成集群,让负载均衡把请求转发到任意一台服务器,不会因为状态不一致导致处理出错,使用“堆机器”的“笨办法”轻松实现高并发高可用。

  • “无状态”又有什么坏处呢?

    既然服务器没有“记忆能力“,它就无法支持需要连续多个步骤的 “事务”操作。例如电商购物,首先要登录,然后添加购物车,再下单、结算、支付,这一系列操作都需要知道用户的身份才行,但“无状态”服务器是不知道这些请求是相互关联的,每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。

HTTPS:

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

image.png

二、协议里面有什么

  1. 请求方法(HTTP Methods):常见的HTTP方法有GET、POST、PUT、DELETE等,用于客户端向服务器发起不同类型的请求。
  2. 状态码(HTTP Status Codes):服务器返回的HTTP状态码表示请求的处理结果,常见的状态码有200(成功)、404(未找到)、500(服务器内部错误)等。
  3. 请求头(HTTP Headers):HTTP请求中的头部包含了关于请求的附加信息,如Content-Type、User-Agent等。
  4. 响应头(HTTP Response Headers):HTTP响应中的头部包含了关于响应的附加信息,如Content-Type、Content-Length等。
  5. Cookie:Cookie是服务器通过响应头发送给客户端的一小段文本,客户端将其存储并在后续请求中发送回服务器,用于实现状态管理。
  6. 会话管理:HTTP是一种无状态协议,但为了实现会话管理,可以使用Cookie、Session、Token等机制来跟踪用户的状态。
  7. URL(Uniform Resource Locator):URL是用于定位资源的统一资源定位符,包含了协议、主机名、端口号、路径等信息。
  8. 缓存(Caching):HTTP协议支持缓存机制,可以减少网络传输和服务器负载,提高性能。

三、HTTP协议要解决的问题

主要问题:人与机器之间高效的信息交互

  • 低门槛
  • 可拓展性
  • 分布式系统下的超文本传输
  • Internet规模
    1. 无法控制的可伸缩性;不可预测的负载、非法格式的数据、恶意消息;
    2. 客户端不能保存所有服务器信息,服务器不能保持多个请求间的状态信息。
  • 独立的组件部署:新老组件并存
  • 向前兼容

四、HTTP请求

1.浏览器HTTP请求发生了什么?

image.png

2.概述

HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  1. 起始行 (start line) : 描述请求或响应的基本信息;
  2. 头部字段集合 (header) : 使用 key-value 形式更详细地说明报文
  3. 消息正文 (entity) : 实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

这其中前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“body”。