3、HTTP常见面试题

发布时间 2023-11-16 22:16:00作者: tiansiju

HTTP是什么?

Http是超文本传输协议,一种在通信双方之间指定的规则。其中超文本是指数据格式可以是文本、图片、视频等等各种类型的数据;

HTTP常见的状态码

  • 1xx:提示信息,传输协议处理的中间状态
  • 2xx:请求成功。客户端发起的请求被服务端正确处理并返回响应数据
  • 3xx:资源重定位。客户端请求的资源发生改变,需要用新的URL重新发起请求
  • 4xx:客户端错误。客户端的请求出现错误
  • 5xx:服务端错误。服务端对请求的处理出现错误

GET和POST

1、二者含义:
  • GET:请求服务端的资源
  • POST: 根据请求体(body)中的数据对服务器资源进行处理
2、GET和POST都是安全和幂等的吗?

GET请求是“只读”操作,所以是安全和幂等的;而POST请求是“新增或者修改操作”,所以不是安全和幂等的

注意:上面对于GET和POST是否安全和幂等只是按照RFC规范判断的,实际中开发者可以用GET方法实现新增或者删除数据的请求,此时GET请求自然就不是安全和幂等的;另外开发者也可以用POST方法实现查询数据的请求,此时POST请求就是安全和幂等的

HTTP缓存技术

HTTP的缓存技术主要有两种:强制缓存和协商缓存:

  • 强制缓存:只要本地缓存没有过期,就是用本地缓存的资源

  • 协商缓存:若本地存在缓存,客户端会给服务端发送请求,若客户端发现请求资源和客户端的本地缓存一致,就返回一个304响应码表示可以使用本地缓存;否则返回响应码200和最新的资源

其中协商缓存的具体做法是:

  • 方法1:第一次请求服务端资源时,服务端返回请求的资源和一个标志位(Last-Modified:记录资源的最后修改时间),客户端把资源和标志位缓存到本地,当再次请求相同资源时,将标志位发送给服务端,服务端通过客户端发过来的标志位判断服务器资源和客户端的缓存是否一致,若一致则返回304,否则返回新的请求资源和标志位

  • 方法2:第一次请求服务端资源时,服务端返回资源和一个标志位(Etag:资源的唯一标识符,若资源被修改,则标志位也不同),客户端把资源和标志位缓存到本地,当再次请求相同资源时,将标志位发送给服务端,服务端通过客户端发过来的标志位判断服务器资源和客户端的缓存是否一致,若一致则返回304,否则返回新的请求资源和标志位

  • 方法1是根据修改时间做出判断的,而时间容易被篡改,相对不安全一些,所以一般方法2用的多一些。此外如果服务端将Last-Modified和Etag发送给了客户端,客户端再次请求相同资源时会将两个标志位同时发送给服务器,由于Etag优先级更高,服务器会先判断Etag,若Etag没有变化,再比较Last-Modified

HTTP的特性

HTTP协议主要有HTTP1.1、HTTP2.0和HTTP3.0,不同版本特性也不同,这里先用HTTP1.1介绍,后续其他版本也会介绍

1、HTTP1.1的优点
  • 简单:HTTP请求由head和body组成,二者都是键值对的形式

  • 灵活且易于扩展:HTTP协议里的URL、各种求情方法、head字段等等都没有固定死,开发者可以自定义和扩展

  • 应用广泛且跨平台:在PC和手机端都适用,且存在基于HTTP的大量应用程序

2、HTTP1.1的缺点
  • 由于无状态,通信双方无需身份验证,故而可能遭遇伪装,比如访问到假网站

  • 由于明文传输,信息容易泄露,比如账号被盗

  • 无法验证报文完整性,报文可能被修改,比如植入广告

3、HTTP1.1的性能如何

结论:性能一般;

原因:HTTP1.1是基于“请求-应答”模式和TCP/IP的,故性能关键在于这两者

  • “请求-应答”模式导致第一个请求得到回应后才能进行第二次请求,如果第一次请求被阻塞,之后的请求都会被阻塞(队头阻塞现象)

  • HTTP1.0中,TCP/IP导致每次发送数据都需要“三次握手”建立连接,以及四次挥手断开连接,开销较大;HTTP1.1中实现了“长连接”,从而能连接复用,“长连接”使得管道传输成为可能,管道传输是指客户端可以发起多次请求,不需要等前一个请求被响应了才能发第二个请求,服务端会按顺序依次响应请求,但是服务端的第一个请求处理时被阻塞了,后续请求都会被阻塞,故管道传输并没有解决响应端的队头阻塞问题(并且实际中支持管道传输技术并不是默认开启的,而且浏览器基本都不支持该技术)

HTTP与HTTPS

1、HTTP和HTTPS的区别
  • HTTP进行明文传输,而HTTPS会对报文进行加密再传输(因为HTTPS中加入了SSL/TSL协议)

  • HTTP进行“TCP三次握手”后,通信双方就建立了连接,而HTTPS再“TCP三次握手”后还需进行“SSL/TLS”的握手过程

  • HTTP的默认端口号是80,而HTTPS的默认端口号是443

  • HTTPS还需要向CA申请数字身份证书,保证服务器身份是可靠的

2、HTTPS解决了HTTP哪些问题

总的来说,解决了HTTP相对不安全的问题。具体来说:

  • 信息加密:导致信息不易泄露

  • 身份证书:通过数字身份证书,保证服务器是可靠的

  • 校验机制:核对内容是否被篡改,若被篡改则不会被显示

HTTP1.1、HTTP2.0、HTTP3.0的演变