HTTP篇面试题

148 阅读9分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

HTTP篇

1.HTTP是什么?

HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。

2.超文本传输协议怎么理解?

超文本传输协议可以分为三个部分:

  • 超文本

文字,图片,视频等的混合体

  • 传输

可以两点之间进行全双工传输数据

  • 协议

确立了一种计算机之间交流通信的规范,以及各种控制以及错误处理方式

总结的讲:

HTTP是一种在计算机世界里专门在两点之间传输文字,图片,视频等超文本数据的约定和规范

3.HTTP的状态码有哪些?

 五大类 HTTP 状态码

200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

4.HTTP常见的字段有哪些?

常见字段描述常见值
Host指定服务器的域名www.baidu.com
Content-Length表明本次回应数据长度1000(字节)
Connection常用于客户端要求服务器使用TCP持久连接Keep-Alive
Content-Type用于服务器回应本次数据的格式text/html; charset=utf-8
Content-Encoding表明服务器返回的数据用的数据压缩的格式gzip

5.GET与POST的区别

推荐博客:www.cnblogs.com/logsharing/… GET 和 POST 是什么?

HTTP 协议中的两种发送请求的方法。

GET:请求从服务器获取资源

POST:它向 URI 指定的资源提交数据,数据就放在报文的 body 里。

HTTP 是什么?

HTTP 是基于 TCP/IP 的关于数据如何在万维网中如何通信的协议。

HTTP 的底层是 TCP/IP。所以 GET 和 POST 的底层也是 TCP/IP,也就是说,GET/POST 都是 TCP 链接。GET 和 POST 能做的事情是一样一样的。你要给 GET 加上 request body,给 POST 带上 url 参数,技术上是完全行的通的。

之所以会有区别是因为(大多数)浏览器通常都会限制 url 长度在 2K 个字节,而(大多数)服务器最多处理 64K 大小的 url。超过的部分,恕不处理。如果你用 GET 服务,在 request body 偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然 GET 可以带 request body,也不能保证一定能被接收到哦。

GET 和 POST 本质上就是 TCP 链接,并无差别。但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

6.HTTP的优缺点是哪些?

优点

  1. 简单

HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,

  1. 灵活易于扩展

HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充

  1. 应用广泛

缺点

  1. 无状态双刃剑

服务器不会记忆HTTP状态,减轻了服务器的负担,但是操作有关联性就会很麻烦。

解决方式:

cookie与session模式

推荐博客:www.yuque.com/docs/share/… 《用户认证》

  1. 明文传输

虽然方便阅读报文信息,但是极易被窃取

解决方式:HTTPS技术进行加密

  1. 不安全
  • 窃听风险)通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
  • 篡改风险)不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
  • 冒充风险)无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

解决方式:HTTPS技术

7.HTTP与HTTPS有哪些区别

  • 加密性:HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • 是否使用证书: 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • 响应速度:HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS 除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • 连接方式:http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • 协议:HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

8.HTTPS是如何解决HTTP的不安全风险

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

image.png

9.HTTPS是如何建立起来的,其中交互了什么?

SSL/TLS协议基本流程

  • 客户端向服务器索要并验证服务器的公钥
  • 双方协商产生会话密钥
  • 双方采用会话密钥进行加密通信

HTTPS 连接建立过程

SSL/TLS协议建立的详细流程:

  1. ClientHello

首先客户端向服务器发起加密通信请求–ClinetHello请求

主要发送以下信息:

  1. 客户端支持的SSL/TLS协议版本号。
  2. 客户端生产的随机数Clinet Random 后面用于会话密钥
  3. 客户端支持的密码套件列表
  1. ServerHello

服务器收到客户端请求后,先发送确定响应报文,然后接着发送ServerHello ,内容如下:

  • 确认SSL/TLS协议版本,如果浏览器不支持,则关闭通信
  • 服务器生产的随机数Server Random 后面用于生产会话密钥
  • 确认密码套件列表
  • 服务器的数字证书
  1. 客户端验证

客户端收到服务器发送的报文后,执行的步骤如下:

  • 通过浏览器或操作系统的CA密钥,确认服务器发送的数字证书真实性
  • 如果没有问题,客户端会取出数字证书中的公钥,然后用它加密报文,报文信息如下
    • 一个随机数(pre-master key
    • 加密通信算法改变通知,表示随后的信息都将用会话密钥加密通信
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。
  1. 服务器的回应

客户端收到了客户端的第三个随机数pre-master key 之后,通过协商的加密算法,计算本次的会话密钥。然后发送最后的信息:

  • 加密通信算法改变通知,后续的信息都将用会话密钥加密通信
  • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信。

会话密钥有三个随机数以及加密算法而合成

  • 客户端生产的随机数Client Random
  • 服务器生产的随机数Server Random
  • 第三个随机数pre-master key