图解网络
- HTTP是一个在计算机里在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP常见的状态码:
- 1XX开头的:是处理的中间状态
- 2xx开头的是:成功了
- 3xx开头的是:重定向
- 4xx:客户端错误
- 5xx:服务器错误
HTTP常见字段:
-
Host :客户端指定服务器的域名
-
content-Length:服务器回应的数据长度
-
connection: 客户端要求服务器保持长连接状态。keep-Alive
-
content-Type: 服务器回应客户端。本次数据是啥格式。
-
content-encoding:说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式。
GET和POST的区别:
- get是从服务器获取指定资源,请求的位置写在url中,参数只允许ASCII字符。
- post是根据请求负荷(报文body)对指定的资源做出处理。请求携带数据的位置一般在报文body中,数据格式任意。
HTTP缓存技术
- 强制缓存
- 协商缓存
HTTP/1.1的特性
- HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」
- 缺点:无状态,明文传输,不安全
无状态是把双刃剑:优点:因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担。
缺点:服务器没有记忆能力,完成有关联性的操作是会麻烦。
解决方法:使用
Cookie
技术。Cookie
通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。不安全:使用HTTPS解决,引入SSL/TLS层
HTTP/1.1 的性能如何? (一般般)
-
- 长连接或叫持久连接,好处:减少了TCP频繁连接造成的额外开销,减轻了服务器端的负载。
-
- 实现管道网络传输。即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
-
- 队头阻塞。顺序发送的请求序列中的一个请求被阻塞,后面的请求都阻塞了,客户端会一直请求不到数据。
HTTP和HTTPS
1.区别
HTTP明文传输,存在安全问题。
HTTPS使报文加密传输。
HTTP连接简单,TCP三次握手;HTTPS还需要SSL/TLS的握手过程。
HTTP端口80;HTTPS端口443,要申请数字证书。
2.HTTPS解决了HTTP的啥问题
解决了安全问题(窃听、篡改、冒充风险)
HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS
协议,可以很好的解决了上述的风险。
实现了1.信息加密 2.校验机制 3.身份证书
实现手段:混合加密,摘要算法(哈希函数),数字证书
HTTPS 是如何建立连接的?其间交互了什么?
SSL/TLS 协议基本流程:
- 客户端向服务器索要并验证服务器的公钥。
- 双方协商生产「会话秘钥」。
- 双方采用「会话秘钥」进行加密通信。
https 和 http 相比,就是传输的内容多了对称加密,可以这么理解吗?
- 建立连接时候:https 比 http多了 TLS 的握手过程;
- 传输内容的时候:https 会把数据进行加密,通常是对称加密数据;
HTTP/1.1 如何优化?
三种思路
1.如何避免发送 HTTP 请求?
-
客户端会把第一次向服务器发送的请求和收到的响应保存到本地磁盘上。下一次客户端发起相同的请求时会先在本地磁盘上查询。如果缓存的响应过期了(查看响应头部信息),客户端会向服务器发送请求。在请求的
Etag
头部会带上第一次响应头部的摘要,服务器把自己的和客户端缓存的资源的摘要比照,没有过期就发送304重定向状态码,告诉客户端你的缓存还有效。这样就可以减少响应资源在网络中传输的延时,如下图:
2.如何减少 HTTP 请求次数?
1. 减少重定向请求次数
当资源从服务器1(url1)转移到服务器2(url2),客户端仍向url1发送请求就会收到3xx重定向,客户端就要再向url2发送请求。但是客户端和源服务器之间架设代理服务器(nginx),代理服务器可以完成重定向的工作,就能减少HTTP请求次数了。
2. 合并请求
如果把多个访问小文件的请求合并成一个大的请求,虽然传输的总资源还是一样,但是减少请求,也就意味着减少了重复发送的 HTTP 头部。
- 合并请求的方式
- 使用
CSS Image Sprites
技术把网页的含有很多小图片、小图标合成一个大图片。 - 服务端使用
webpack
等打包工具将 js、css 等资源合并打包成大文件。 - 将图片的二进制数据用
base64
编码随HTML文件一起发送,客户端收到 HTML 后,就可以直接解码出数据,然后直接显示图片。
- 使用
弊端:当大资源中的某一个小资源发生变化后,客户端必须重新下载整个完整的大资源文件,这显然带来了额外的网络消耗。
3. 延迟发送请求
「按需获取」请求网页的时候,没必要把全部资源都获取到,而是只获取当前用户所看到的页面资源。
3. 如何减少 HTTP 响应的数据大小?
- 压缩数据
- 无损压缩
gzip
Brotli
压缩算法 - 有损压缩
- 无损压缩