1.HTTP协议不同版本的主要区别?
HTTP/0.9:
- HTTP协议的原型;
- 只支持GET方法;
- 不支持多媒体内容;
- 只有HTML对象;
HTTP/1.0:
- 广泛使用
- 增加多种方法
- 支持多媒体对象
- 无连接,无状态
HTTP/1.1:
- 长连接
- 管道化
- 缓存处理
- 断点传输
HTTP/2.0:
- 性能进一步提升
- 二进制分帧
- 多路复用
- 头部压缩
- 服务端推送
2.长连接解决了什么问题?
短连接:http/1.0,连接->传输数据->关闭连接。每进行一次HTTP操作就建立一次连接,任务结束就中断。
长连接:http/1.1,连接->传输数据->保持连接->传输数据->关闭连接。使用长连接的HTTP协议,会在响应头中添加:Connection:keep-alive
这个连接就是TCP的三次握手连接和四次挥手关闭连接
由于每次建立连接需要成本,而且短连接的情况下,建立和关闭连接很频繁,导致成本增加,长连接就是为了解决这个问题而产生的
3.HTTP/2.0有哪些技术提升了性能?
多路复用:在一个信道上传输多路信号和数据流的过程和技术。
以前只能我说一句,你回一句,现在我可以一次多说几句,你也可以给我一次多回几句
- 二进制分帧是基础,通信单位为帧
- 多请求并行不依赖多TCP连接(因为有长连接了)
- 并行在一个TCP连接交互多种类型信息
头部压缩:
- 在客户端和服务端之间维护一个静态的字典,字典中是常见的头部名称及方法
- 对字符进行哈夫曼编码,来进行压缩
服务端推送:
传统的获取网页的过程都是客户端发送请求,服务端进行响应。
相当于服务端未卜先知,它知道客户端需要哪些数据并且主动的进行推送 。
4.HTTP报文结构
请求报文:[请求方法] [请求地址] [HTTP版本] [请求头] [请求内容]
响应报文:[HTTP版本] [状态码] [状态解释] [应答头] [应答内容]
5. HTTP的请求方法和使用场景
HTTP请求的本质是对服务器资源进行操作的过程(增删改查+系统功能)
GET:请求服务器发送某个资源
HEAD:和GET类似,但是服务器在响应时只返回首部,不返回内容(客户端对服务器某些资源进行检查)
POST:向服务器写入数据,登录
TRACE:观察请求报文到服务器的最终样子
PUT:和GET相反,向服务器写入资源(文件以及多媒体资源)
DELETE:请求服务器删除请求URL所指定的资源
6.常见的状态码
200~299:成功状态码
200:OK,请求没问题,实体包含所请求的资源
204:No Content ,响应报文中包含若干首部和一个状态行,没有实体部分
300~399:重定向状态码
304: Not Modified,所请求的资源未被修改,服务器返回此状态码,不会返回任何资源
400~499:客户端错误状态码
400:Bad Request,客户端请求的语法错误,服务器无法理解(构建请求报文时出错)
401:Unauthorized,用户没有访问权限,需要进行认证
403:Forbidden,当前客户端没有权限去请求这个资源,所以请求被服务器拒绝了(也可能是别的原因导致被拒绝)
404:Not Found,服务器无法找到所请求的URL
500~599:服务端错误状态码
500:Internal Server Error,服务器内部错误,无法完成请求
502:Bad Gateway,网关,或者代理出现问题
503:Service Unavailable,说明服务器现在无法提供服务(服务器宕机了)
504:Gateway Timeout,网关或代理的服务器,未及时从远端服务器获取请求