这是我参与「第五届青训营 」伴学笔记创作活动的第 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方法有以下区别:
- 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
- GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
- 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
HTTP/1.1 存在的问题
- 并发连接数量有限
- 每一个连接都得经过 TCP 和 TLS 握手耗时,建立连接得花额外的时间
- 服务器与客户端单方传递数据
- 当客户端需要获取通知时,只能通过定时器不断地拉取消息,这无疑浪费大量了带宽和服务器资源
- HTTP 头部巨大且重复
- 由于 HTTP 协议是无状态的,每一个请求都得携带 HTTP 头部,特别是对于有携带 cookie 的头部,而 cookie 的大小通常很大
HTTP/2 的优化
- 头部压缩
- 二进制帧
- 并发传输
- 服务器主动推送资源