总结了一下自己掌握的网络知识点,持续更新和完善
http 定义
http 超文本传输协议,是客户端和服务端之间的通信协议,处于网络七层协议的应用层
https 是在 http 的基础上加入 ssl(Secure Socket Layer)安全套接层,为了让网络传输更加安全
http 和 https 的区别
- https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- http 的连接很简单,是无状态的;https 协议是由 ssl+http 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
网络七层协议
OSI 是一个开放性的通信互连参考模型,有以下 7 层结构
tcp 协议
tcp 是传输控制协议,处于七层协议的传输层,提供可靠的连接服务,建立连接需要三次握手,过程如下
- 客户端建立连接时,发送一个 syn 包(seq=x)给服务端
- 服务端确认收到 syn 包,发送确认包 ack(ack=x+1),同时发送自己的 syc 包(seq=y)给客户端
- 客户端确认收到 ack 和 syn 这两个包,发送确认包 ack(ack=y+1)给服务端
三次握手主要是为了保证服务端和客户端双方的都能收到请求并作出及时响应
tcp 建立连接需要三次握手,断开连接需要四次挥手(客户端和服务端都可以主动发起断开请求),过程如下
- 主动方完成传输后发送 fin 包(seq=v)给被动方
- 被动方确认收到 fin 包后,发送确认包 ack 包(ack=u+1,seq=v,ACK=1)给主动方,此时等待完成还未发送完的数据包
- 被动方完成传输后发送 fin 包(ACK=1,seq=w,ack=u+1)给主动方
- 主动方收到 fin 包后发送 ack 包(ACK=1,seq=u+1,ack=w+1)给被动方,双方确认后即可释放连接
http1.1 新增了长连接,管道技术(pipelining),HOST 域,100 状态码(1.1 之前是没有的)
http1.0 需要使用 keep-alive 来告知服务器建立一个长连接,而 http1.1 默认支持长连接
通过管道技术可以一次性发起多个请求,然而在接受响应的时候还需要按照发送的请求顺序返回,如果第一个请求被阻塞了,后面的请求即使处理完毕了,也需要等待,这就是线头(队头)阻塞
http2.0 新增了二进制分帧,多路复用,头部压缩,服务器推送
同一个域名使用一个 tcp 连接,消除多个 tcp 连接带来的耗时,单个连接可以并行请求和相应,不会干扰
http 状态码
开发中常见的状态码有 200,400,404,403,500,502 等等,分别有 12345 开头的状态码,下面列举常见的状态码
状态码 | 含义 | 说明 |
100 | Continue | 客户端应当继续发送请求 |
200 | OK | 请求已成功 |
301 | Moved Permanently | 请求资源被永久移动到新的位置,永久重定向 |
302 | Move Temporarily | 请求的资源现在临时从不同的URI响应请求,临时重定向 |
304 | Not Modified | 请求资源未被修改,客户端不需要重新从服务器拉取资源 |
400 | Bad Request | 请求无法被服务器理解 |
401 | Unauthorized | 请求需要用户验证 |
403 | Forbidden | 服务器拒绝响应请求 |
404 | Not Found | 资源未找到 |
405 | Method Not Allowed | 请求方法不能使用,服务端必须返回一个Allow头表示资源能够请求的列表 |
500 | Internal Server Error | 服务内部出错,一般是后台代码执行出错 |
502 | Bad Gateway | 错误网关 |
503 | Service Unavailable | 服务维护或者过载,临时无法处理请求 |
504 | Gateway Timeout | 网关或者代理不能及时从上游服务器获取响应 |
CDN 内容分发网络
CDN(Content Delivery Network)是内容分发网络,服务商在全球各地放置自己的节点服务器,能够根据网络流量和节点的负载情况和用户的距离来选择最快的服务节点,提高网站的响应速度,目前免费的 cdn 网址有bootcnd,baiducdn
CDN 使用的是请求资源的镜像缓存,用户请求资源时,CDN 服务器从源服务器拉去资源缓存并响应给客户端,后续的请求如果缓存未失效,请求由对应的节点响应
如果在服务商配置了 cdn 缓存,要想更新缓存,可以采用静态资源可以通过添加时间戳或者到服务器后台更新下缓存
对于不需要缓存的动态资源,可以在 cdn 服务器的后台进行配置缓存过期时间为 0