1.HTTP是什么
超文本传输协议
用于主机之间传输文字、图片、视频等超文本数据的规范协议
HTTP不限于服务器向客户端发送超文本,服务器之间也可能进行超文本的传输
2.******HTTP的状态码
除了不常见的1类提示信息
还有2类的报文成功收到状态信息
3类的重定向信息,表示客户端申请访问的资源发生了变动,需要客户端重新申请访问
4类包括最常见的404,表示客户端的报文有误,服务端无法理解
5类表示服务器故障,无法处理报文
3.********HTTP的常见字段
host字段:表示需要访问的服务器域名
URL: 请求资源的地址
connection字段:表示客户端请求服务端建立TCP长连接,用于多次请求复用(只有服务端也允许长连接才能建立)
accept:表示客户端可以接收到数据格式
accept encoding 表示客户端可以接受的压缩方式
content length :表示服务器回应数据的长度
content type: 表示服务端回应报文段数据格式(网页等)
content encoding : 表示服务器回应数据的压缩方式
HTTP在传输层使用TCP协议,因此HTTP报文在传输层会被划分成片,HTTP报文主要分为首部和主题部分;需要通过特殊字符隔开,避免粘包问题
粘包问题就是指TCP传输报文是需要将其分片,此操作中就可能使两个信息的部分内容被划分到一个TCP报文段中,所以需要使用特殊的转义字符来将不同的消息隔开
4.********HTTP协议和RPC协议的区别
HTTP协议是在TCP连接的基础上建立的,单纯的TCP连接不足以实现复杂的消息传输,例如由于TCP是面向字节的协议,所以可能会出现粘包问题,因此需要协议来规范
HTTP协议就是现在最流行的超文本传输协议,再此之前不同的机构也设计过其他协议,比如RPC,现在仍在使用
RPC的特点在于服务于某个特定范围内,在通用性上不如HTTP,但也由于其服务范围小,不需要为了通用性而设置一些冗余信息
5.***************HTTP请求方法主要分为哪些方法
分为get和post两种
get请求的含义是获取指定位置的资源,get参数直接写在URL字段里,有长度限制
post请求是基于HTTP请求报文的主体部分内容对指定资源进行处理,post参数写在报文主体部分,没有长度限制
一般而言,get请求是不包含报文主体的,所以只传输一个报文首部;而post请求则会先传输一个报文首部,在传输成功后再传输主体部分。但这也不是绝对的,比如火狐就只传一次
6.************get post 请求的安全与幂等性
安全性表示是否会对服务器资源进行修改,存在破坏风险
幂等性表示多次发出同一个请求(中间不插入其他操作)是否会得到相同的结果
因此get请求是安全幂等的,post请求是不安全不幂等的
此外get请求的参数信息直接放到URL中,而post参数信息放到了报文主体部分,但这不意味着get信息比post信息更有泄露风险,因为HTTP报文内容是明文的,可以被抓包
如果希望在传输过程中数据不泄露,可以使用HTTPS协议加密传输
get请求也可以使用报文主体;post请求的URL字段(指定资源地址)也可以有参数;基础请报文设计只是官方机构的推荐,并没有严格的约束
7.什么是HTTP缓存技术
客户端请求服务器资源是一种占用通信资源的行为,当需要进行一些重复性的HTTP请求得到相同资源时,就可以直接将这些资源数据缓存在本地浏览器,在需要就不需要访问服务器
由于服务器的资源是可能发生改变的,所以缓存存在寿命,当缓存过期时就无法再使用
8.********HTTP缓存的实现方式有哪些
有强制缓存和协商缓存两种,协商缓存又有基于最后修改时间或者唯一标识两种实现方法
强制缓存:当客户端申请访问服务器资源时,首先会看本地是否有未过期的对应资源,如果有直接使用,不执行请求
协商缓存:表示当本地存在过期缓存时,会向服务器申请,同时基于最后修改时间或者唯一标识来判断资源是否被修改,如果没有则不需要返回具体资源数据,让客户端直接调用缓存即可;如果有那就是返回完整数据
协商缓存是在强制缓存执行失败的前提下进行的
9.****************HTTP的特点
常见的HTTP协议有1.1 2.0 3.0
优点:结构简单,只有首部和主体两部分;灵活易扩展,首部各字段和主体部分都没有固定长度,可以扩充修改;通用性强,可以用于不同主机通信
缺点:这才是重点
(1)服务器没有记忆能力
基于HTTP协议传输的报文不会被服务器记录,因此服务器不需要消耗资源去记录历史HTTP报文,也因此在执行同一客户的请求时每条报文都需要用户的身份信息
解决办法是Cookie技术,在客户端第一次访问某服务器时,服务器会分配一个唯一的cookie值给客户,在客户端访问该服务器的报文中需要该字段表明客户身份
(2)使用明文传输
基于HTTP协议的传输都是明文的,也就是说报文可以通过抓包获取,这有利于进行编程调试但也容易使报文信息被其他人获取
(3)其他的不安全隐患
没有验证通信报文完整性的能力,也就是我们发出或者收到的报文可能被篡改
解决方法就是使用保密性能更好的HTTPS协议
10.**********HTTP1.1的性能特点
HTTP1.1在HTTP1.1的基础上升级了长连接功能,允许在一个TCP连接上进行多个请求响应的传输
HTTP长连接本质上其实是TCP长连接
此外在长连接的基础上,HTTP1.1还具有流水线发送请求的能力,不必等到一个请求得到响应后才发送下一个请求,而是同时发送多个请求
因此请求队列不会出现队头堵塞的情况,但响应队列可能会出现
队头堵塞就是说但队头的请求无法发出或者响应时,会堵塞后面的请求
流水线发送请求的功能不是默认开启的,一般也不使用