哈喽我们好呀~ HTTP
说起来难也不难,涉及到的知识点还挺多,感觉回忆
比年龄
先到中年
学而不思则“忘”
,学了又思仍是“忘”
,仍是得写写水文,保持记录“依据”的习气呀。
好嘞,废话不多说,搜刮一下HTTP
常见面试题
出发点是便利回忆
,简洁、直观展现,后续还会不断补充细节~
1.什么是HTTP? HTTP 和 HTTPS 的差异?
︎《图解HTTP》中解释道:
Web运用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为标准,完成从客户端到服务器等一系列运作流程。而协议是指规则的约定。能够说,Web是树立在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点:
(1)混合加密(对称加密+非对称加密):完成通讯加密
- 对称加密(也叫私钥加密):通讯两边运用
相同的密钥
去加密/解密数据。 - 非对称加密(也叫公钥加密):运用一对密钥,
公钥加密
的密文只有对应的私钥
才能解密
。
- 客户端建议恳求(默认443端口)
- 服务器回来
公钥
证书(服务器中有一对公钥和私钥,只发公钥
给客户端) - 客户端
验证证书
- 客户端生成
对称密钥
,运用公钥
加密后发给服务器 - 服务器运用
私钥
解密,得到对称密钥 - C/S两边运用对称密钥:
- 加密
明文
并发送 - 解密
密文
得到明文
- 加密
(2)摘要算法(哈希算法):保证传递实在的信息,防止数据被篡改
完成完整性的手法主要是摘要算法,摘要算法又称哈希算法、散列算法。它经过一个函数,把
任意长度
的数据转换为一个长度固定
的数据串。
因为不论原始数据是什么样的,得到的哈希值都是固定长度的,也就是说哈希值并不是原始数据加密后的密文,仅仅一个验证身份的令牌,比较常用的摘要算法有:MD5、SHA-1、SHA-256等。
(3)数字签名:身份验证
奉天承运,皇帝诏曰! 等等。。这圣旨不会是假造的吧?
漏漏漏…大漏特漏,♀️ 大人请看章印和画押!
数字签名
的作用等同于签名
和指纹
,是绝无仅有
的,为了证明我是“我”⛄︎。
《图解HTTP》中 HTTPS 作业流程如下所示:
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步)
-
URL解析: 先判断输入的是
URL
仍是要查找的关键字
,若是URL则解析获取协议、主机、端⼝、path等信息。 -
IP寻址: 依据
URL
进行DNS域名解析
,找到实在IP
-
恳求/回来数据:
-
向服务器建议
衔接恳求
,进行三次握手
树立TCP链接,衔接后发送HTTP
恳求,服务器回来相应数据 -
然后进行
四次挥手
断开TCP链接
-
-
烘托展现:
- 浏览器接纳
HTTP呼应
,对呼应进行解码 - 解析
HTML
文件创立DOM树
,解析CSS
构建CSSOM树
- 结合
DOM
、CSS
构建烘托树,最后布局和制作烘托树
- 浏览器接纳