不就是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 常见的状态码有哪些?

响应分为五类:信息响应(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树
    • 结合 DOMCSS 构建渲染树,最后布局和绘制渲染树
相关推荐
LuciferHuang5 小时前
震惊!三万star开源项目竟有致命Bug?
前端·javascript·debug
GISer_Jing5 小时前
前端实习总结——案例与大纲
前端·javascript
天天进步20155 小时前
前端工程化:Webpack从入门到精通
前端·webpack·node.js
姑苏洛言6 小时前
编写产品需求文档:黄历日历小程序
前端·javascript·后端
知识分享小能手7 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
姑苏洛言7 小时前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端
2501_916008897 小时前
iOS App抓包工具排查后台唤醒引发请求异常
websocket·网络协议·tcp/ip·http·网络安全·https·udp
你的人类朋友8 小时前
🤔什么时候用BFF架构?
前端·javascript·后端
知识分享小能手8 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3