作为程序员,不论在大学还是在工作中,网络这个词是再熟悉不过了,作为移动端的一枚开发者,平时写业务需求,请求数据都要使用网络,那还记得网络的知识点么,今天就来回顾一下:
一、网络的基础知识
计算机网络:可以根据规模分WAN
,Wide Area Network 广域网
,和LAN局域网
。通过电脑连接交换机再到路由器的连接。
TCP/IP机制:它是TCP/IP通信协议
的统称。我们常听到协议入IP,TCP,HTTP
等协议,记住:TCP/IP
就是IP,TCP,HTTP
等协议的集合。协议就是计算机与计算机之间通过网络实现通信时需要达成的一种的“约定”。这些协议就是让不同厂商
的设备,不同的CPU
和不同的操作系统
组成的计算机之间进行通信
HTTPS:其实
HTTP协议
是承载于TCP协议
之上的,在HTTP
和TCP
之间添加一个安全协议层
,SSL
或者TSL
(ssl/tsl协议传输,包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等),则就是常说的HTTPS
。
它是
面向连接
的,可靠
的,基于字节流
的传输层
通信协议。
从一个HTTP请求来看网络分层原理
二、HTTP
HTTP方法
- GET方法获取资源:请求获取Request-URI所标识的资源
- POST方法传输资源:在Request-URI所标识的资源后附加新的数据
- PUT方法更新资源
- DELETE方法删除资源
- HEAD方法获得报文首部
- OPTIONS方法,用来跨域请求(OPTIONS 请求与 HEAD 类似,一般也是用于客户端查看服务器的性能)
- CONNECT方法,用来建立连接,用于代理服务器
get
和post
的差别
缓存角度:GET
请求后浏览器会主动缓存
,POST
默认情况下不
能
参数角度: GET
请求一般放在URL
中,因此不安全
,POST
请求放在请求体
中,相对而言较为安全
,但是在抓包的情况下都是一样的。
编码角度: GET
请求只能进行URL编码
,只能接受ASCII码
,而POST
支持更多的编码类型
且不
对数据类型限值
。
GET
请求幂等
,POST请求不幂等
,幂等指发送 M 和 N 次请求(两者不相同且都大于1),服务器上资源的状态一致。
HTTP报文组成
1、请求报文:请求方法 ,请求URL,HTTP协议以及版本,报文头,报文体
- 请求行:有请求方法,请求URL,http协议以及版本;
- 请求头:一堆键值对
- 空行:当服务器在解析请求头的时候,遇到了空行,表明后面的内容是请求体
- 请求体:请求数据
2、响应文:报文协议以及版本,状态码以及状态描述,响应头,响应体
- 状态行:http协议和版本,状态码以及状态描述
- 响应头
- 空行
-
响应体
3、持久连接
在http1.0中,客户端每隔很短时间会对服务器发出请求,查看是否有新的数据,只要轮询
足够快,就可以造成交互实时
进行,但这个做法,会对两端造成大量的性能浪费
。
对于http1.1中的长连接,使用connection:keep-alive
进行长连接
,客户端只
请求一次
,但是服务器
会将继续保持连接
,再次请求时,避免
了重新
建立连接
。
注意,keep-alive不会永久保持连接
,只
有保持
一个时间段。
4、HTTPS
协议:由于HTTP
天生“明文”
的特点,整个传输过程完全透明
,任何人都能够在链路中截获,修改
或者伪造
请求、响应报文
,数据不
具有可信
性。
使用HTTPS
时,所有的HTTP请求和响应发送到网络前,都要进行加密。
https = http + ssl/tls
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
对称加密:加密 解密使用同一密钥
非对称加密:公钥-随意分发,私钥-服务器自己保持
公钥加密的数据,只能通过私钥解密
私钥加密的数据,所有公钥能解密(公钥都可以解开,指的是一对秘钥)
公钥可以发送给所有的客户端,私钥只保存在服务器端
5、URL统一资源定位符,URL的结构:
6、HTTP状态码
302:临时重定向
400:笼统地提示了错误
403:服务器禁止访问
405:请求方法不被服务器端允许
500:服务器报错
501:客户端请求的功能还不支持
503:服务器当时很忙,暂时无法响应服务
「1xx」: 代表请求已被接受,需要继续处理。
「2xx」: 表示成功状态。
「3xx」: 重定向状态。
「4xx」: 客户端错误。
「5xx」: 服务器端错误。
7、Accept字段理解
- 数据格式
- 压缩方式
- 支持语言
- 字符集
8、TCP和UDP的区别
TCP
是一个面向连接
,可靠
,基于字节流
的传输层
协议。
UDP是一个面向无连接
的传输层协议。
TCP是面向连接的,客户端和服务器端的连接,双方互相通信之前,TCP
需要三次握手
建立连接,而UDP没有建立连接
的过程
HTTPS请求过程
- Client发起一个HTTPS请求,连接443端口。这个过程可以理解成是「请求公钥的过程」。
- Server端收到请求后,通过第三方机构私钥加密,会把数字证书(也可以认为是公钥证书)发送给Client。
- 浏览器(客户端)安装后会自动带一些权威第三方机构公钥,使用匹配的公钥对数字签名进行解密。
根据签名生成的规则对网站信息进行本地签名生成,然后两者比对。
通过比对两者签名,匹配则说明认证通过,不匹配则获取证书失败。 - 在安全拿到「服务器公钥」后,客户端Client随机生成一个「对称密钥」,使用「服务器公钥」(证书的公钥)加密这个「对称密钥」,发送给Server(服务器)。
- Server(服务器)通过自己的私钥,对信息解密,至此得到了「对称密钥」,此时两者都拥有了相同的「对称密钥」。‘
- 接下来,就可以通过该对称密钥对传输的信息加密/解密啦,从上面图举个例子
Client用户使用该「对称密钥」加密'明文内容B',发送给Server(服务器)
Server使用该「对称密钥」进行解密消息,得到明文内容B。
- 为了防止中间人截取、修改公钥,需要
「第三方认证」
,最重要的是「数字签名」
,避免了获取的公钥是中间人的
数字签名:将网站的信息,通过特定的算法加密,比如MD5,加密之后,再通过服务器的私钥进行加密,形成「加密后的数字签名」。
浏览器会去安装一些比较权威的第三方认证机构的公钥,比如VeriSign、Symantec以及GlobalSign等等。验证数字签名的时候,会直接从本地拿到相应的第三方的公钥,对私钥加密后的数字签名进行解密得到真正的签名。然后客户端利用签名生成规则进行签名生成,看两个签名是否匹配,如果匹配认证通过,不匹配则获取证书失败。