前言
简述HTTP1.0、1.1、2.0的主要区别?
HTTP头Connection: keep-alive是什么意思?解决了什么问题?
描述常见的HTTP请求方法与使用场景?
常见的状态码404、503、504分别表示什么意思?怎么定位?
HTTP介绍
HTTP/0.9:HTTP协议原型、设计缺陷、只支持GET方法、不支持多媒体内容、只有HTML对象 HTTP/1.0:广泛使用、增加多种方法、支持多媒体对象、无连接、无状态 HTTP/1.1:长连接、管道化、缓存处理、断点传输 HTTP/2.0:性能进一步提升、二进制分帧、多路复用、首部压缩、服务端推送 HTTP/3.0:QUIC (Quick UDP Internet Connections), 快速 UDP 互联网连接。QUIC是基于UDP协议的。两个主要特性:线头阻塞(HOL)问题的解决更为彻底、切换网络时的连接保持 通俗来讲:将tcp取消掉,因为tcp依然是顺序发送,顺序接收的,依然有队头堵塞问题,取消tcp才能解决队头堵塞问题
Keep-Alive 优点:Keep-Alive模式更加高效,因为避免了连接建立和释放的开销。缺点:长时间的Tcp连接容易导致系统资源无效占用,浪费系统资源。
多路复用
多路复用通常表示在一个信道上传输多路信号或数据流的过程和技术。通过使用多路复用,通信运营商可以避免维护多条线路,从而有效地节约运营成本
二进制分帧是基础,通信单位为帧 多请求并行不依赖多TCP连接 并行在一个TCP连接交互多种类型信息
头部压缩
通过哈夫曼编码进行压缩
服务端推送
服务端“未卜先知” 服务端主动推送资源
HTTP报文结构
- 请求头:
- 第一层:【请求方法】【请求地址】【HTTP版本】
- 第二层:【请求头】
- 第三层:【请求内容】
2.应答头:
- 第一层:【HTTP版本】【状态码】【状态解释】
- 第二层:【应答头】
- 第三层:【应答内容】
请求举例:
代码语言:javascript复制POST https://coding.imooc.com HTTP/1.1
Accept-Encoding:gzip
Accept-Language:zh-CN
{
"sort":0,
"unlearn":0,
"page":2
}
HTTP请求方法
请求方法:HTTP请求的本质是对服务器资源进行操作的过程(增删改查 系统功能),通过定义不同方法实现不同操作是清晰并且是必要的。
- GET:最常用的方法,常用于请求服务器发送某个资源
- PUT:和GET相反,向服务器写入资源
- POST:向服务器写入数据
- DELETE:请求服务器删除请求URL所指定的资源
- HEAD:和GET类似,但服务器在响应中只返回首部
- TRACE:观察请求报文到达服务器的最终样子
幂等操作:幂等操作只任意多次执行所产生的影响均与一次执行的影响相同。
幂等函数:幂等函数是指可以使用相同参数重复执行,并能获得相同结果的函数。
GET、HEAD、TRACE、OPTIONS都是幂等操作
PUT、POST、DELETE都要取决于后台实现
HTTP状态码
- 200~299 成功状态码
- 300~399 重定向状态码
- 400~499 客户端错误状态码
- 500~599 服务端错误状态码
- 200:OK 请求没问题,实体的主体部分包含了所请求的资源
- 204:No Content 响应报文中包含若干首部和一个状态行,但没有实体的主体部分 (返回没问题,但是应答没有具体内容)
- 304:Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源 (表示没有修改,原本从服务器获取改成从本地获取了)
从客户端角度排查问题
- 400:Bad Request 客户端请求的语法错误,服务器无法理解
- 401:Unauthorized 请求客户端在获取对资源的访问权之前,对自己进行认证
- 403:Forbidden 请求被服务器拒绝了
- 404:Not Found 用于说明服务器无法找到所请求的URL
从服务端角度排查问题
- 500:Internal Server Error 服务器内部错误,无法完成请求
- 502:Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
- 503:Service Unavailable 用来说明服务器现在无法为该请求提供服务(服务器宕机了)
- 504:Gateway Timeout 网关或代理的服务器,未及时从远端服务器获取请求(网关超时了)