HTTP/HTTPS网络

186 阅读6分钟

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:

  1. Accept浏览器可接收数据格式
  2. Accept- Encoding 浏览器可接收压缩算法,如gzip
  3. Accept- languange 浏览器可接收语言,如 zh-CN
  4. Connection: keep-alive 一次TCP连接重复使用
  5. cookie
  6. Host
  7. User-Agent(简称)浏览器信息
  8. Content-type 送数据格式,如 application/json

response headers

Content-type 送数据格式,如 application/json

Contet-length 返回数据大小,多少字节

Conetnt-Encoding返回数据压缩算法,如gzip

强缓存,协商缓存

首先要明白,为啥要缓存;

**缓存:**可以吧一些没必要资源  去重新获取(一般是静态资源,js,css,img等),就需要缓存。业务数据则不容易被缓存。

第一次访问完,第二次访问没必要重新湖区资源就需要缓存。

为什么要缓存?

缓存最核心目的:就是为了 通过减少网络请求体积与数量,让网络请求更快些;

  1. 网络请求加载相比于cpu计算,网页加载更慢;
  2. 性能优化:最大瓶颈 --网络请求
  3. 减少网络请求体积与数量,才能让网络请求更快些;
  4. 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资源唯一标识。

三次握手,四次挥手

前端安全防范