输入URL后都发生这些事情!
HTTP协议图文简述
标签访问,服务端返回一个动态脚本,数据就在脚本里面。✏️主要是在建立HTTP连接、和断开链接的时候,HTTP协议属于应用层协议,建立在TCP协议基础上。
✏️和HTTP一样都属于应用层协议,目的是提供全双工的网络通信,没有跨域的限制。复用HTTP连接建立通道,缺点是需要用心跳机制来确保连接状态。
✏️都是传输层的协议,TCP需要先建立连接通道,数据传输安全、可靠,当然效率也更低。UDP不用建立连接,直接发送数据,不保证可靠到达,效率高。
✏️keep-alive是HTTP1.1协议中默认开启的长链接,一次建立连接,保持TCP的长链接,后续HTTP请求可以复用,提升了响应效率。
缺点是服务端有队头阻塞的现象,就是服务端必须排队处理每一个请求。可以升级到HTTP2,采用多路复用并行处理的方式,不用依次排队了。
✏️就是在服务端、客户端中间截获数据,伪造公私钥,欺上瞒下,从而窃取数据。防范办法就是采用CA证书,客户端会验证CA证书的合法性。
CA证书中包含了公钥、网站身份信息等。
✏️主要是在表单输入的地方注入JS脚本内容(如),从而攻击当前网站,和SQL注入攻击的路径类似,都是非法输入恶意代码。
v-text
、v-bind
、文本插值{{}}
绑定都是自动做了转义的,因此谨慎使用v-html
。Cross site scripting 的简称为XSS,是因为CSS就重名了。
✏️钓鱼网站利用已登录的cookie凭证发起非法请求,从而完成攻击。
SameSite
:跨站不传输cookie。HTTPOnly
,客户端不可访问cookie。✏️CSP(Content Security Policy)网页内容安全策略,相当于配置了一个白名单,告诉浏览器那些外部资源可以加载、执行,具体实现是由浏览器完成的。
Content-Security-Policy: script-src 'self';
class MySingle {
constructor() {
//创建实例
}
static getInstance() {
//静态方法属于类本身,这里的this也就指向类本身
if (!this.instance)
this.instance = new MySingle()
return this.instance;
}
}
//使用
MySingle.getInstance()
✏️封装一个策略的执行器,然后策略算法可以灵活的扩展添加。
//计算薪资,根据员工绩效等级(A、B、C)计算薪资
const salaryCenter = {
//计算薪资
getSalary(value, mode) {
return this[mode](value);
},
//添加绩效等级及其策略
addStrategy(mode, strategyFunc) {
this[mode] = strategyFunc;
}
}
//添加不同绩效等级的策略,这就是对扩展开放
salaryCenter.addStrategy('A', function (value) {
return value * 1.2;
});
salaryCenter.addStrategy('B', function (value) {
return value * 1;
});
salaryCenter.addStrategy('C', function (value) {
return value - 200;
});
//使用
salaryCenter.getSalary(100,'A')
✏️根据一个标识来创建实例,TS中可以用接口来约束创建的实例。
//工厂模式
class AnimateFactory {
static Create(type) {
switch (type) {
case 'bird':
return new Bird();
case 'duck':
return new Duck();
default:
console.log('type not exist:' + type);
}
}
}
✏️由一个消息中心来管理订阅的消息事件,通过发送消息来触发事件。用于不同组件之间的通信。
//消息中心
class EventCenter {
constructor() {
this.task = {};
}
//订阅消息,注册消息处理回调
registry(type, func) {
this.task[type] ??= [];
//支持重复注册
this.task[type].push(func);
}
// 发送消息,触发消息回调的执行
emit(type, ...args) {
if (!this.task[type]) return;
this.task[type].forEach(func => {
func.apply(this, args);
})
}
//用单例返回消息中心实例
static getInstance() {
this.instance ??= new EventCenter();
return this.instance;
}
}
//使用,注册、发布
EventCenter.getInstance().registry('ele', (food) => {
console.log('饿了,开始做' + food);
})
EventCenter.getInstance().emit('ele', '面条')
✏️Vue2的双向绑定,监听数据变化就是拦截属性的get、set,观察数据的变更。