不就是HTTP嘛?怎么还能把我面倒啦👊😅

1,465 阅读7分钟

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

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

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

🛌出发点是方便记忆,💬简洁、直观展示,后续还会不断补充细节~

image.png

1.什么是HTTP? HTTP 和 HTTPS 的区别?

📚︎《图解HTTP》中解释道:

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

image.png

看着有点懵🦧。。简单来说

image.png 设计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点:

image.png

(1)混合加密(对称加密+非对称加密):实现通信加密 🔒

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

无标题-2023-12-11-0129.png

  • 客户端发起请求(默认443端口)
  • 服务器返回公钥证书(服务器中有一对公钥和私钥,只发公钥给客户端)
  • 客户端验证证书
  • 客户端生成对称密钥,使用公钥加密后发给服务器
  • 服务器使用私钥解密,得到对称密钥
  • C/S双方使用对称密钥:
    • 加密明文并发送
    • 解密密文得到明文

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

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

image.png 由于不管原始数据是什么样的,得到的哈希值都是固定长度的,也就是说哈希值并不是原始数据加密后的密文,只是一个验证身份的令牌,比较常用的摘要算法有:MD5、SHA-1、SHA-256等。

image.png

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

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

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

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

image.png


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

image.png

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**服务器错误,服务器在处理请求的过程中发生了错误

常见的有十几种:

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

4.GET 和 POST 的区别?

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

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

image.png

🚑🚑🚑

  • URL解析: 先判断输入的是 URL 还是要搜索的 关键字,若是URL则解析获取协议、主机、端⼝、path等信息。
  • IP寻址: 根据 URL 进行 DNS域名解析,找到真实 IP image.png
  • 请求/返回数据:
    • 向服务器发起连接请求,进行三次握手建立TCP链接,连接后发送HTTP请求,服务器返回相应数据

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

65941490-beba-11eb-85f6-6fac77c0c9b3.png

  • 渲染展示:
    • 浏览器接收HTTP响应,对响应进行解码
    • 解析 HTML 文件创建 DOM树 ,解析 CSS 构建 CSSOM树
    • 结合 DOMCSS 构建渲染树,最后布局和绘制渲染树

参考资料:

www.runoob.com/http/http-s…

vue3js.cn/interview/h…

blog.csdn.net/Newbie___/a…