- HTTP和Https有什么区别?为什么说HTTPS更安全?
HTTP:超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:安全套接字层超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer)。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS和SSL支持使用X.509数字认证,用户可以确认发送者是谁,它的主要作用有两种:1、建立一个信息安全的通道,来保证数据传输的安全;2、确认网站的真实性。
https和http的主要区别:
一、https协议需要到ca机构申请ssl证书(如Gworg CA),另外Gworg CA还提供2年期ssl证书,高级别的ssl证书可以让地址栏展示企业名称。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,http是80端口,https是443端口。
四、http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
五、如果要实现HTTPS那么可以淘宝Gworg获取SSL证书。
总的来说HTTPS比HTTP更加安全,能够有效的保护网站用户的隐私信息安全.
MongoDB和MySQL有什么区别?
(1)存储方式
关系型数据库是表格式的,nosql数据库是大块的组合在一起,通常存储在数据集中,就像文档、键对值或者图结构。
(2)存储结构
Rdbms是结构化数据,一般都先预定义结构,结构描述了数据的形式和内容。
nosql数据库基于动态结构,使用与非结构化数据,很用以适应数据类型和结构变化。
(3)存储规范
rdbms是把数据切割成最小的关系表以避免重复,获得精简的空间利用,但是虽然看着清晰,但是设计多个表时,数据管理复杂。
nosql存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储更一个整体,这样整块的数据便于读写。
(4)存储扩展
rdbms是纵向扩展
nosql是横向扩展。
(5)查询方式
rdbms是通过结构化查询语言来操作数据库,功能强大,是业界标准的用法。
nosql是使用非结构化查询语言,它是没有标准的。
- MongoDB和MySQL有什么区别?
(1)存储方式
关系型数据库是表格式的,nosql数据库是大块的组合在一起,通常存储在数据集中,就像文档、键对值或者图结构。
(2)存储结构
Rdbms是结构化数据,一般都先预定义结构,结构描述了数据的形式和内容。
nosql数据库基于动态结构,使用与非结构化数据,很用以适应数据类型和结构变化。
(3)存储规范
rdbms是把数据切割成最小的关系表以避免重复,获得精简的空间利用,但是虽然看着清晰,但是设计多个表时,数据管理复杂。
nosql存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储更一个整体,这样整块的数据便于读写。
(4)存储扩展
rdbms是纵向扩展
nosql是横向扩展。
(5)查询方式
rdbms是通过结构化查询语言来操作数据库,功能强大,是业界标准的用法。
nosql是使用非结构化查询语言,它是没有标准的。
- Cookie、Session、本地存储有什么区别?应用场景有哪些?
(1)cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
(2)cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗
考虑到安全应当使用session。
(3)session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
(4)单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个cookie。
(5)cookie不能进行跨域处理,session存储是依赖于cookie,默认也是不能跨域的,但是session的数据是存在服务器上的,可以通过服务器来操作数据库,将session进行入库处理,既可以实现跨域
cookie
用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
只要添加了就一直存在,只要不是手动的去清除或者expires为默认的过期时间。但是安全性无法保证,而且也无法对客户的喜好进行定量的分析,有个数和长度的限制。
session
对话的时效性的问题,如果客户选购商品的途中浏览器突然关闭,服务端找不到cookie中的sessionid了,那么选购的商品就不存在了
session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,
它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。
这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。
- 说说你对Node中事件回调的理解
函数作为参数传递到另一个函数中,然后被调用。
同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。
- 说一下对nodejs的认识
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境
JavaScript有ECMAScript BOM DOM组成
node.js 由 ECMAScript 和 Node模块API 组成
- 什么是域名
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某
一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。
- Npm 全局下载和本地下载的区别
1-安装位置
局部: 当前node项目下的node_modules目录中
全局: C:\Users\lce\AppData\Roaming\npm
2-命令不同
全局命令npm i xxx -g
局部命令 npm i xxx
3-全局安装会产生一个命令行工具
4-局部安装的包使用之前需要先进行导入
- 什么是http协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )
服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
- Commonjs规范是什么
1-每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
2-在模块中使用global 定义全局变量,不需要导出,在别的文件中可以访问到。
3-每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。
4-通过 require加载模块,读取并执行一个js文件,然后返回该模块的exports对象。
5-所有代码都运行在模块作用域,不会污染全局作用域。
6-模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
7-模块加载的顺序,按照其在代码中出现的顺序
- Express中如何配置静态资源
app.use(express.static(目录))
- Ejs模板引擎如何进行条件渲染
ejs.renderFile() 参数一:模板路径 参数二:渲染参数 参数三:回调函数
- 在浏览器地址栏键入URL,按下回车之后会经历以下流程
1.查找浏览器缓存:如果查找到缓存中有我们URL对应的文件,则判断是否命中强缓存,如果命中直接读取使用即可,如果强缓存没有命中,
2.DNS域名解析:将输入的URL解析成对应的IP地址
3.生成HTTP请求报文:请求报文包括起始行,首部,主体
4.TCP连接:客户端与服务端进行TCP三次握手,建立连接
5.发送HTTP请求:握手成功后,客户端向服务端发送http请求,请求数据
6.服务器收到请求并返回数据:客户端根据返回的结果进行渲染展示,同时判断是否需要将文件存入缓存
7.TCP断开连接:客户端与服务端进行TCP四次挥手,断开连接
- 说一下GET和POST有什么区别?
①get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。
②get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,
不同的浏览器和服务器不同,一般限制在2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;
③get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
④get请求可以被缓存,post请求不会被缓存。
⑤get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。
⑥get请求只能进行url编码
- Http请求头有哪些?作用是什么?
请求头: 作用:
①Accept ①浏览器端能够处理的内容类型。
②Accept-Encoding ②浏览器能够处理的的压缩编码。通常指定压缩方法
③Accept-Language ③浏览器当前设置的语言
④Accept_Charset ④浏览器能够显示的字符集
⑤Connection ⑤浏览器与服务器的连接类型
⑥Host ⑥发送请求的页面的域名
⑦Referer ⑦发送请求的页面的URI。
⑧User-Agent ⑧浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。
⑨Cookie ⑨用来存储一些用户信息以便让服务器辨别用户身份的。
⑩Cache-Control ⑩指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器获取数据。
⑪If-Modified-Since ⑪把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。
⑫If-None-Match ⑫If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。
- 说说对Nodejs中的事件循环机制理解
定义:
①JavaScript引擎本身不实现事件循环机制。浏览器中的事件循环由浏览器实现的,NodeJS中事件循环主要是由底层Libuv库实现的。
②Libuv库是事件驱动的,其封装和统一了不同平台的API实现。NodeJS的跨平台和事件循环机制都是通过Libuv库实现的。
步骤:
①NodeJS的V8引擎解析JavaScript代码,然后调用Node API
②NodeAPI将任务分配给Libuv库处理,
③Libuv中通过事件循环机制管理这些任务的执行,处理结束后将结果返回给V8引擎。
④V8引擎回调处理Libuv返回
- 如何实现jwt鉴权机制?说说你的思路
是什么:JWT(JSON Web Token),本质就是一个字符串书写规范,如下图,作用是用来在用户和服务器之间传递安全可靠的信息
步骤:
①服务器当验证用户账号和密码正确的时候,给用户颁发一个令牌,这个令牌作为后续用户访问一些接口的凭证
②后续访问会根据这个令牌判断用户时候有权限进行访问
token组成部分:
Token,分成了三部分,头部(Header)、载荷(Payload)、签名(Signature),并以.进行拼接。其中头部和载荷都是以JSON格式存放数据,只是进行了编码
如何实现:
①生成token:登录成功的时候,颁发token
②验证token:访问某些资源或者接口时,验证token
优缺点:
优点:
①json具有通用性,所以可以跨语言
②组成简单,字节占用小,便于传输
③服务端无需保存会话信息,很容易进行水平扩展
④一处生成,多处使用,可以在分布式系统中,解决单点登录问题
⑤可防护CSRF攻击
缺点:
①payload部分仅仅是进行简单编码,所以只能用于存储逻辑必需的非敏感信息
②需要保护好加密密钥,一旦泄露后果不堪设想
③为避免token被劫持,最好使用https协议
- 说说你是如何理解Nodejs中的事件循环?
定义:Node底层使用的语言libuv,是一个c++语言。他用来操作底层的操作系统,封装了操作系统的接口。Node的事件循环也是用libuv来写的,所以Node生命周期和浏览器的还是有区别的。
六个阶段:
timers:计时器(setTimeout、setInterval等的回调函数存放在里边)
pending callback
idle prepare
poll:轮询队列(除timers、check之外的回调存放在这里)
check:检查阶段(使用 setImmediate 的回调会直接进入这个队列)
close callbacks
13.Vue中key的作用是什么?
①key属性是用来给每个节点添加一个唯一的标识。key属性的值必须是唯一的
②key属性的作用主要是用来高校的更新虚拟DOM,从而提高vue渲染的性能的
- 请简单叙述关系型数据和非关系型数据库的区别
关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。
NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。
区别:
存储上
Sql通常以数据库表的形式存储,
NoSql采用key-value的形式存储
数据表VS 数据集
关系型是表格型的,存储在数据表的行和列中。彼此关联,容易提取。而非关系型是大块存储在一起。
关系型和非关系型数据库的主要差异是数据存储的方式。
关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。
- 简述jwt相比于传统token的优势
无需服务器端存放数据,减轻服务器端的压力
占用带宽比较小、跨语言
token自身包含用户信息且无法篡改,在服务(网关)中可以自行解析校验出用户信息,对认证服务器(account-svc)压力小
- 什么是Http协议?端口号的作用是什么?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
一个HTTP请求由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成
请求行:请求方式 请求协议
请求头:是客户端发送给服务器端的一些信息cookie或session等
请求数据:post请求时发送的一些数据
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
http响应的结果由 相应行、响应头、空行、响应体四个部分组成
响应行:协议状态码信息 状态码:1xx ---- 5xx
响应头: cookie信息的写入、响应的地址、文件类型等
响应体: 响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染,显示页面内容
端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口。
- Http的状态码有哪些?作用是什么?
1开头:表示请求已被接受,需要继续处理
2开头:表示请求成功
3开头:表示请求被重定向
4开头:表示客户端错误
5开头:表示服务器错误
- CommonJS的规范是什么?
JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器。然而, JavaScript 标准定义的 API 是为了构建基于浏览器的应用程序。并没有制定一个用于更广泛的应用程序 的标准库。CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷。
它的终极目标就是:提供一个类似Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序 的阶段。
用CommonJS API 编写出的应用,不仅可以利用 JavaScript 开发客户端应用,而且 还可以编写以下应用。
•服务器端 JavaScript 应用程序。(nodejs) •命令行工具。 •桌面图形界面应用程序。
CommonJS 就是模块化的标准(规范),nodejs 就是 CommonJS(模块化)的实现。
- 说说你对前后端分离开发模式的理解?有什么优势?
后端仅返回前端所需要的数据,前端通过ajax访问后端给前端提供的接口 后端不再渲染html页面,也不再控制前端的效果
优势:
(1)彻底解放前端。前端不再需要向后台提供模板或是后台在前端HTML中嵌入后台代码。
(2)提高工作效率,分工更加明确。
(3)局部性能提升。通过前端路由的配置,我们可以实现页面的按需加载,无需一开始加载首页便加载网站的所有的资源,服务器也不再需要解析前端页面,在页面交互及用户体验上有所提升。
(4)降低维护成本。
- 从浏览器中输入url地址,到页面显示中间的流程是什么?
大体流程:
(1)浏览器构建HTTP Request请求
(2)网络传输
(3)服务器构建HTTP Response 响应
(4)网络传输
(5)浏览器渲染页面
详细流程:
(1)输入url地址
(2)应用层进行DNS解析
(3)应用层生成HTTP请求报文
(4)传输层建立TCP连接
(5)网络层使用IP协议来选择路线
(6)数据链路层实现网络相邻节点间可靠的数据通信
(7)物理层传输数据
(8)服务器处理反向传输
(9)服务器返回一个 HTTP 响应
(10)浏览器渲染