HTTP 使用指南| 青训营笔记

100 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

什么是 HTTP ?

HTTP 协议一般指 HTTP(超文本传输协议)。 超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。

HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。 HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。

HTTP 消息结构

  • 请求行:方法名,url,协议版本
  • 状态行:协议版本,状态码,状态码描述
  • 请求头:请求的元数据,包括长度或者业务逻辑所需要的数据等
  • 响应头:响应的元数据
    • 1xx:表示请求已接收,继续处理
    • 2xx:表示请求已经被服务器端成功解析
    • 3xx:表示重定向
    • 4xx:表示客户端的请求存在错误,导致服务端不能正确处理这个请求
    • 5xx:表示服务端在处理请求的过程中发生了错误,无法处理这个请
  • 请求体:请求的数据内容
  • 响应体:响应的数据内容

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

常用的请求方式是GET和POST.

  • GET方式:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。

  • POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:

    • 1:对现有资源的解释;
    • 2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息;
    • 3:提交数据块;
    • 4:通过附加操作来扩展数据库 。

从上面描述可以看出,Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。

GET与POST方法有以下区别:

  1. 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
  2. GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
  3. 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。

HTTP/1.1 存在的问题

  1. 并发连接数量有限
    • 每一个连接都得经过 TCP 和 TLS 握手耗时,建立连接得花额外的时间
  2. 服务器与客户端单方传递数据
    • 当客户端需要获取通知时,只能通过定时器不断地拉取消息,这无疑浪费大量了带宽和服务器资源
  3. HTTP 头部巨大且重复
    • 由于 HTTP 协议是无状态的,每一个请求都得携带 HTTP 头部,特别是对于有携带 cookie 的头部,而 cookie 的大小通常很大

HTTP/2 的优化

  1. 头部压缩
  2. 二进制帧
  3. 并发传输
  4. 服务器主动推送资源

image.png