什么是 webp
- 提供了有损压缩和无损压缩的图片格式
- 谷歌推出的一种图片格式
webp 的目标
- 减少文件大小,但达到和 jpeg 格式相同的图片品质,希望减少图片在网络上的发送时间。
webp 的 MIME 类型
- image/webp
Yoki
上面是两个页面之间的交互,现在是单方面向外面聊天的
JSON With Padding
1 | <script type="text/javascript"> |
实现 CORS 通信的关键是服务器,只要服务器实现了 CORS 接口,就可以跨源通信
1 | //相对路径是本源 |
cors 分为两类,简单请求和非简单请求
满足下面三个条件,就属于简单请求
1 | //让我们看看,在这个场景中,浏览器会发送什么的请求到服务器,而服务器又会返回什么给浏览器: |
一般都是以 Access-Control 开头
非简单请求是对服务器有特殊要求的请求,比如请求方法是 put 和 delete,或者 content-type 是 application/json
1 | //浏览器 |
1 | HTTP/1.1 200 OK |
一旦服务器通过了预检请求,以后每次浏览器的请求都跟简单请求一样
1 | document.domain = "a.com"; |
1 | //父窗口http://aaa.com向子窗口http://bbb.com发消息,调用postMessage方法。 |
1 | var onmessage = function(event) { |
盐:一个随机的字符串,往明文密码和一个随机的字符串拼接在一起
为了应对黑客们用彩虹表破解密码,我们可以先往明文密码加盐,然后再对加盐之后的密码用哈希算法加密。由于盐在密码校验的时候还要用到,因此通常盐和密码的哈希值是存储在一起的。
采用加盐的哈希算法对密码加密,要确保要往每个密码里添加随机的唯一的盐,而不是让所有密码共享一样的盐。
虽然加盐的算法能有效应对彩虹表的破解法,但它的安全级别并不高,因为计算哈希值耗时极短,黑客仍然可以用穷举法来破解,只是增加了一些耗时。
为了应对暴力破解法,我们需要非常耗时的而不是非常高效的哈希算法。BCrypt 和 PBKDF2 算法应运而生。
这两个算法最大的特点是我们可以通过参数设置重复计算的次数,重复计算的次数越多耗时越长。如果计算一个哈希值需要耗时 1 秒甚至更多,那么黑客们采用暴利法破解密码将几乎不再可能。破解一个 6 位纯数字密码需要耗时 11.5 天,更不要说高安全级别的密码了。
常规的 http 请求,所有信息明文传播,只要中间人在链路中的任意阶段进行劫持,就会带来三大风险:
https 可以解决这些问题
http+TLS,TLS 是传输层加密协议,前身是 SSL 协议(1999 年应用广泛,然后标准化,改名就是 TLS,所以同一个东西的不同阶段)
SSL/TLS 协议是为了解决 http 的三大风险而设计的,希望达到:
又叫域名劫持
深入理解 http 请求,dns 劫持与解析
dns 劫持和 http 劫持的区别
https 信息的安全完全建立在证书可信的基础上,如果中间人伪造证书怎么办?
对称加密算法在加密和解密的时候用的是同一个秘钥
对称加密模式:
客户端和服务端进行通信,采用对称加密,如果只用一个秘钥,很容易破解;如果每次用不同的,海量秘钥的管理和传输成本又比较高,所以可以采用非对称加密。
需要两个密钥,一个是公钥,一个是私钥
非对称加密模式:
即使黑客拿到了公钥,没有私钥也是没有办法解密,不考虑彩虹表的情况下,完全可以长期使用一对私钥
彩虹表是一个用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列。 查找表常常用于包含有限字符固定长度纯文本密码的加密。这是以空间换时间的典型实践,在每一次尝试都计算的暴力破解中使用更少的计算能力和更多的储存空间,但却比简单的每个输入一条散列的翻查表使用更少的储存空间和更多的计算性能。
最经典的非对称加密算法是 RSA
RSA 公钥加密算法是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。公钥私钥成对出现,用其中一个加密只能用另一个解密,通常用公钥加密私钥解密。
web 最常见的就是 post 和 get 方法。其中 get 一般将参数编码在 url 中来传递数据,post 或者 put 必须要将数据放在 http 请求实体中,这样的数据就是 http 表单
form 表单的 enctype 默认就是 urlencoded
1 | <form method='post' enctype='application/x-www-form-urlencoded'> |
1 | $.post('/xxx', { |
1 | Content-Type: text/xml |
1 | //报错的 |
每个字段由一段 boundary string 来分隔,浏览器保证该 boundary string 不与内容重复,因而 multipart/form-data 能够成功编码二进制数据
1 | ------WebKitFormBoundaryWyjhf3VZMVeInmDe |
1 | let formData = new FormData(); |
200(from cache)和 304(not modified)
三个字段 Cache-Control,Pragma,Expires(过期时间),下面介绍一下响应头中的
http1.1 新增的字段,是控制浏览器缓存的主要字段。