哈喽我们好呀~ HTTP说起来难也不难,涉及到的知识点还挺多,感觉回忆年龄先到中年

学而不思则“忘”,学了又思仍是“忘”,仍是得写写水文,保持记录“依据”的习气呀。

好嘞,废话不多说,‍搜刮一下HTTP常见面试题

出发点是便利回忆,简洁、直观展现,后续还会不断补充细节~

不就是HTTP嘛?怎样还能把我面倒啦

1.什么是HTTP? HTTP 和 HTTPS 的差异?

︎《图解HTTP》中解释道:

Web运用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为标准,完成从客户端到服务器等一系列运作流程。而协议是指规则的约定。能够说,Web是树立在HTTP协议上通讯的。

不就是HTTP嘛?怎样还能把我面倒啦

看着有点懵。。简单来说

不就是HTTP嘛?怎样还能把我面倒啦
规划HTTP开始的意图是:为了提供一种发布和接纳HTML页面的方法,它有以下特色:

  • 依据TCP/IP通讯协议明文传递数据,内容或许会被窃听。
  • 灵敏:报文可按照其规则自定义字段,且传输的数据并不是计算机底层中的二进制包,而是文本、HTML文件、图片、视频、压缩包等等。
  • 无衔接:无衔接并不是指 不衔接,而是限制每次衔接只处理一个恳求,当服务器回来本次恳求的应对后便当即封闭衔接,下次恳求再从头树立衔接。
  • 无状况:无法依据之前的状况进行本次的恳求处理。

1.1 小结:HTTP 和 HTTPS 的差异

  • 默认端口不同,HTTP是80,HTTPS是443
  • HTTPS相对来说更安全,HTTPS运用了SSL/TLS协议做了加密处理
  • HTTP相对来说功能更高,HTTPS需求做服务器、客户端加密解密处理,消耗更多的CPU及内存资源
  • 运用HTTPS本钱更高,HTTPS需求SSL,SSL证书需求钱

1.2 扩展:为什么说HTTPS更安全?

上述提到HTTP经过明文传输,不行安全,然后加了SSL/TLS搞了个升级版(HTTPS),中心有3点:

不就是HTTP嘛?怎样还能把我面倒啦

(1)混合加密(对称加密+非对称加密):完成通讯加密

  • 对称加密(也叫私钥加密):通讯两边运用相同的密钥去加密/解密数据。
  • 非对称加密(也叫公钥加密):运用一对密钥,公钥加密的密文只有对应的私钥才能解密

不就是HTTP嘛?怎样还能把我面倒啦

  • 客户端建议恳求(默认443端口)
  • 服务器回来公钥证书(服务器中有一对公钥和私钥,只发公钥给客户端)
  • 客户端验证证书
  • 客户端生成对称密钥,运用公钥加密后发给服务器
  • 服务器运用私钥解密,得到对称密钥
  • C/S两边运用对称密钥:
    • 加密明文并发送
    • 解密密文得到明文

(2)摘要算法(哈希算法):保证传递实在的信息,防止数据被篡改

完成完整性的手法主要是摘要算法,摘要算法又称哈希算法、散列算法。它经过一个函数,把任意长度的数据转换为一个长度固定的数据串。

不就是HTTP嘛?怎样还能把我面倒啦
因为不论原始数据是什么样的,得到的哈希值都是固定长度的,也就是说哈希值并不是原始数据加密后的密文,仅仅一个验证身份的令牌,比较常用的摘要算法有:MD5、SHA-1、SHA-256等。

不就是HTTP嘛?怎样还能把我面倒啦

(3)数字签名:身份验证

奉天承运,皇帝诏曰! 等等。。这圣旨不会是假造的吧?

漏漏漏…大漏特漏,‍♀️ 大人请看章印和画押!

数字签名的作用等同于签名指纹,是绝无仅有的,为了证明我是“我”⛄︎。

不就是HTTP嘛?怎样还能把我面倒啦


《图解HTTP》中 HTTPS 作业流程如下所示:

不就是HTTP嘛?怎样还能把我面倒啦

2.HTTP1.0/1.1/2.0 的差异?

HTTP1.0:

  • 浏览器与服务器只保持短暂的衔接,浏览器的每次恳求都需求与服务器树立一个TCP衔接

HTTP1.1:

  • 引入了持久衔接,即TCP衔接默认不封闭,可被多个恳求复用
  • 在同一个TCP衔接里面,客户端能够一起发送多个恳求
  • 尽管答应复用TCP衔接,但是同一个TCP衔接里面,所有的数据通讯是按次序进行的,服务器只有处理完一个恳求,才会接着处理下一个恳求。假如前面的处理特别慢,后边就会有许多恳求排队等着
  • 新增了一些恳求方法
  • 新增了一些恳求头和呼应头

HTTP2.0:

  • 选用二进制格局而非文本格局
  • 彻底多路复用,而非有序并阻塞的、只需一个衔接即可完成并行
  • 运用报头压缩,降低开支
  • 服务器推送

3.HTTP 常见的状况码有哪些?2️⃣0️⃣0️⃣

呼应分为五类:信息呼应(100–199),成功呼应(200–299),重定向(300–399),客户端过错(400–499)和服务器过错 (500–599):

分类 分类描绘
1** 信息,服务器收到恳求,需求恳求者继续执行操作
2** 成功,操作被成功接纳并处理
3** 重定向,需求进一步的操作以完成恳求
4** 客户端过错,恳求包括语法过错或无法完成恳求
5** 服务器过错,服务器在处理恳求的过程中发生了过错

常见的有十几种:

状况码 状况码英文名称 场景
200 OK 恳求成功
201 Created 新增或修正数据成功
202 Accepted 恳求已进入使命行列,被异步处理
203 Non-Authoritative Information 令牌或登录状况失效
204 No Content 删去数据成功
301 Moved Permanently 恳求的资源被永久重定向到新的位置,将从头的地址从头恳求
400 Bad Request 客户端恳求的语法过错,服务器无法了解
401 Unauthorized 恳求要求用户的身份认证
403 Forbidden 得到拜访授权,但拜访是被制止
404 Not Found 拜访资源不存在
405 Method Not Allowed 客户端恳求中的方法被制止
406 Not Acceptable 恳求的数据格局不是服务接纳的类型
500 Internal Server Error 服务器内部过错,无法完成恳求
502 Bad Gateway 服务器网关过错
503 Service Unavailable 超载或系统维护

4.GET 和 POST 的差异?

GET POST
撤退按钮/刷新 无害 数据会被从头提交
书签 可保藏为书签 不行保藏为书签
缓存 会被浏览器主动cache 不会缓存,除非手动设置
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data 为二进制数据运用多重编码
前史 参数保留在浏览器前史中 参数不会保存在浏览器前史中
对数据长度的限制 限制长度(最大长度是 2048 个字符 无限制
对数据类型的限制 只答应 ASCII 字符 没有限制,也答应二进制数据
安全性 安全性较差,参数直接暴露在URL上 更安全,参数不会被保存在浏览器前史或 web 服务器日志中
可见性 参数经过URL传递,对所有人都是可见的 POST放在Request body中

5.在地址栏输入 URL 后发生了什么?(总结成了4步)

不就是HTTP嘛?怎样还能把我面倒啦

  • URL解析: 先判断输入的是 URL 仍是要查找的 关键字,若是URL则解析获取协议、主机、端⼝、path等信息。
  • IP寻址: 依据 URL 进行 DNS域名解析,找到实在 IP
    不就是HTTP嘛?怎样还能把我面倒啦
  • 恳求/回来数据:
    • 向服务器建议衔接恳求,进行三次握手树立TCP链接,衔接后发送HTTP恳求,服务器回来相应数据

    • 然后进行四次挥手断开TCP链接

不就是HTTP嘛?怎样还能把我面倒啦

  • 烘托展现:
    • 浏览器接纳HTTP呼应,对呼应进行解码
    • 解析 HTML 文件创立 DOM树 ,解析 CSS 构建 CSSOM树
    • 结合 DOMCSS 构建烘托树,最后布局和制作烘托树