Http协议:
HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传输层协议,保证了数据传输的可靠性。具有简单快速,灵活,无状态协议。
http缺点:(最主要:http是明文传输,敏感信息容易被中间劫持)
1.通信使用明文(没有加密),内容肯呢个会被窃听;
2.不验证通信方的身份,可能遭遇伪装
3 无法证明明文完整性,所有有可能遭遇篡改
所以https请求可以一定程度解决数据安全问题;(现代浏览器已开始强制https协议)
HTTPS如何保证安全?
Https = http + 加密 ,劫持了也无法解密
主要是用来对称加密,非对称加密(这两个为主),以及数字签名;
加密方式:
对称加密: 一个key同负责加密,解密;
**非对称加密:**一对key,A加密之后,只能用B来解密
https同时用到了这两种加密方式,讲对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。但是这样会有个中间人问题,也是有问题的。
中间人问题:如果客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送所有数据。
如果按照常理使用一个安全的第三方办法证书(CA),证明身份的身份,防止被中间人攻击。但是这样做还是有问题,如果中间人篡改了证书,那身份证证明是不是就失效了呢?
所以可以使用一个新的技术,数字签名。
数字签名就是用CA自带Hash算法对证书内容进行HASH得到一个摘要,再用CA密钥加密,最终生成数字签名。当别人把证书发过来时候,我再用同样hash算法,再次生成消息摘要,然后用CA公钥对数字解名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了。能最大程度保证通信安全了。(这个概念网上查的,有兴趣可以多了解解更深入些)
HTTP和HTTPS协议的主要区别如下:
- HTTPS协议需要CA证书,费用较高;而HTTP协议不需要;
- HTTP协议是超文本传输协议,信息是明文传输的,HTTPS则是具有安全性的SSL加密传输协议;
- 使用不同的连接方式,端口也不同,HTTP协议端口是80,HTTPS协议端口是443;
- HTTP协议连接很简单,是无状态的;HTTPS协议是有SSL和HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP更加安全。
请求状态码:
1xx 服务器收到请求
2xx 请求成功,如200
3xx 重定向,如302
4xx 客户端错误,如404
5xx 服务端错误, 如500.
301 永久重定向(配合location,浏览器自动处理)
302 临时重定向 (配合 location, 浏览器自动处理)
304 资源未被修改
404 资源未找到
403 没有权限
500 服务器错误
504 网关超时
常见的HTTP请求方法;
- GET: 向服务器获取数据;
- POST:将实体提交到指定的资源,通常会造成服务器资源的修改;
- PUT:上传文件,更新数据;
- DELETE:删除数据;
- HEAD:获取报文首部,与GET相比,不返回报文主体部分;
- OPTIONS:询问支持的请求方法,用来跨域请求;
- CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信;
- TRACE: 回显服务器收到的请求,主要⽤于测试或诊断。
request headers:
- Accept浏览器可接收数据格式
- Accept- Encoding 浏览器可接收压缩算法,如gzip
- Accept- languange 浏览器可接收语言,如 zh-CN
- Connection: keep-alive 一次TCP连接重复使用
- cookie
- Host
- User-Agent(简称)浏览器信息
- Content-type 送数据格式,如 application/json
response headers
Content-type 送数据格式,如 application/json
Contet-length 返回数据大小,多少字节
Conetnt-Encoding返回数据压缩算法,如gzip
强缓存,协商缓存
首先要明白,为啥要缓存;
**缓存:**可以吧一些没必要资源 去重新获取(一般是静态资源,js,css,img等),就需要缓存。业务数据则不容易被缓存。
第一次访问完,第二次访问没必要重新湖区资源就需要缓存。
为什么要缓存?
缓存最核心目的:就是为了 通过减少网络请求体积与数量,让网络请求更快些;
- 网络请求加载相比于cpu计算,网页加载更慢;
- 性能优化:最大瓶颈 --网络请求
- 减少网络请求体积与数量,才能让网络请求更快些;
- cpu 计算与 页面渲染都快了 (这两者没太多优化空间);
强缓存
强缓存大致逻辑就是:
1. 浏览器 像服务器发送 初次请求以后
2.服务器返回资源和 Cache-Control字段 (代表强制缓存时间,单位是秒)
3. 浏览器再次请求话,如果Cache-Contol缓存时间没过期,就去找本地缓存找。
再次请求 本地缓存,不经过网络
4.本地缓存返回资源给浏览器
若是存在缓存过期情况下,则再去请求走一遍;(浏览器再去请求一遍服务器,服务器返还资源和Cache-Control字段;按照上面1,2,3,4流程再走一遍)
协商缓存
比较直接理解就是:服务器需要判断客户资源,是否和客户端资源一样。
资源一直返回304;
否则返回200和最新资源(客户端与服务器端资源不一样了)
协商缓存流程:
1.初次请求(浏览器出送请求到服务器)
2. 返回资源,和资源标识
3.再次请求,带着资源标识
4. 返回304, 或者返回资源和新的资源 标识。(一致返回 304,
否则返回200 和最新资源(客户端与服务端资源不一样了)。)
资源标识:
Response Headers中有两种:
Last - Modified 资源最后修改时间
Etag资源唯一标识。
三次握手,四次挥手
前端安全防范