文章目录
计算机网络——HTTP协议
HTTP概况
HTTP协议是HyperText Transfer Protocol(超文本传输协议)的简称,是web应用的核心。
HTTP写实是用于从WWW服务器传输超文本到本地浏览器的传送协议,是一个客户端和服务器端请求和应答的标准。
HTTP是一个哑服务器,即成功连接后无提示,其他协议连接成功后一般会有欢迎信息之类的东西。
HTTP有两个实现:客户程序和服务器程序,他们通过交换HTTP报文进行通信,HTTP定义了报文的结构以及报文交换的方式,使用TCP协议作为它的支持运输协议, 它使用套接字与TCP进行通信,TCP为HTTP提供可靠数据传输服务。
HTTP是无状态协议,即它不保存任何客户的任何信息。为了响应不断变化的业务,之后采用cookie来保存用户的状态。
HTTP是一个瞬时协议,也就是说一次传输建立一次连接。
非持续连接和持续连接
当客户——服务器的交互式通过TCP进行的,并且每个请求/相应对是经过一个单独的TCP连接发送,称为非持续连接
当所有请求/相应对是经过同一个TCP连接发送的,称为持续连接
HTTP1.0默认使用非持续连接,HTTP1.1默认使用持续连接
一个连接,多次请求即为持续连接;一个连接一次请求即为非持续连接。
采用非持续连接的HTTP
在采用非持续连接的情况下,当请求html页面包含同一个服务器上的其他对象时,首先,请求html页面时会建立一个TCP连接,然后在展示页面中的其他对象时,会为每个请求对象都建立一个TCP连接。
建立一次TCP连接会消耗两个RTT(往返时间),一个RTT包含分组的传播时延、排队时延以及分组处理时延。
因此,采用非持续连接会造成不必要的时延浪费
可以通过设置并行连接来减少这种时延浪费,默认方式下,大部分浏览器打开5-10个并行的TCP连接,每条连接处理一个请求响应事物
非持续连接的缺点:
- 必须为每一个请求的对象建立和维护一个全新的连接,导致客户和服务器中都要分配TCP的缓冲区和保持TCP变量
- 每一个对象要经受两倍RTT的交付时延,即一个RTT用于创建TCP连接,另一个RTT用于请求和接收一个对象
采用持续连接的HTTP
持续连接中,服务器在发送响应后保持该TCP连接打开,后续的请求和响应报文能够通过该TCP连接进行传送
HTTP默认使用带流水线(碰到一个引用就发送一个请求)的持续连接,不带流水线的版本之后再就收到一个请求的响应后才发出新的请求
若一条连接经过一定时间间隔后仍未被使用,HTTP服务器会关闭该连接
持久连接使得多数请求以管线化方式发送成为可能,管线化方式即指不必每次发送请求后等服务端回应之后才能再次发送请求,而是不必等服务端回应就可以可以连续发送请求。
HTTP2允许在相同连接中过多个请求和回答交错,并增加了在该连接中优化HTTP报文请求和回答的机制
HTTP报文格式
HTTP报文自然分为请求报文和响应报文,如图所示,HTTP报文由三部分组成:报文首部、空行(CR+LF)和报文主体。请求报文和响应报文的区别只在于报文首部。
请求报文的报文首部由请求行和首部字段组成。
- 请求行是请求报文的第一行,包括三部分内容:请求方法、请求内容URL和HTTP协议版本,请求报文必须包含请求行
响应报文的报文首部由响应行和首部行组成
- 状态行为响应报文的第一行,包括三部分内容:状态码、原因短语和HTTP协议版本,响应报文必须包含状态行
报文主体不一定存在,有可能为空。
首部字段包含请求和相应的各种条件和属性的各类首部。一般分为四种:
- 通用