总结了一下自己掌握的网络知识点,持续更新和完善

http 定义

http 超文本传输协议,是客户端和服务端之间的通信协议,处于网络七层协议的应用层

https 是在 http 的基础上加入 ssl(Secure Socket Layer)安全套接层,为了让网络传输更加安全

http 和 https 的区别

  1. https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
  2. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
  3. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  4. http 的连接很简单,是无状态的;https 协议是由 ssl+http 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

网络七层协议

OSI 是一个开放性的通信互连参考模型,有以下 7 层结构

tcp 协议

tcp 是传输控制协议,处于七层协议的传输层,提供可靠的连接服务,建立连接需要三次握手,过程如下

  1. 客户端建立连接时,发送一个 syn 包(seq=x)给服务端
  2. 服务端确认收到 syn 包,发送确认包 ack(ack=x+1),同时发送自己的 syc 包(seq=y)给客户端
  3. 客户端确认收到 ack 和 syn 这两个包,发送确认包 ack(ack=y+1)给服务端

三次握手主要是为了保证服务端和客户端双方的都能收到请求并作出及时响应

为什么 tcp 需要三次握手而不是二次或者四次

tcp 建立连接需要三次握手,断开连接需要四次挥手(客户端和服务端都可以主动发起断开请求),过程如下

  1. 主动方完成传输后发送 fin 包(seq=v)给被动方
  2. 被动方确认收到 fin 包后,发送确认包 ack 包(ack=u+1,seq=v,ACK=1)给主动方,此时等待完成还未发送完的数据包
  3. 被动方完成传输后发送 fin 包(ACK=1,seq=w,ack=u+1)给主动方
  4. 主动方收到 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客户端应当继续发送请求
200OK请求已成功
301Moved Permanently请求资源被永久移动到新的位置,永久重定向
302Move Temporarily请求的资源现在临时从不同的URI响应请求,临时重定向
304Not Modified请求资源未被修改,客户端不需要重新从服务器拉取资源
400Bad Request请求无法被服务器理解
401Unauthorized请求需要用户验证
403Forbidden服务器拒绝响应请求
404Not Found资源未找到
405Method Not Allowed请求方法不能使用,服务端必须返回一个Allow头表示资源能够请求的列表
500Internal Server Error服务内部出错,一般是后台代码执行出错
502Bad Gateway错误网关
503Service Unavailable服务维护或者过载,临时无法处理请求
504Gateway Timeout网关或者代理不能及时从上游服务器获取响应

CDN 内容分发网络

CDN(Content Delivery Network)是内容分发网络,服务商在全球各地放置自己的节点服务器,能够根据网络流量和节点的负载情况和用户的距离来选择最快的服务节点,提高网站的响应速度,目前免费的 cdn 网址有bootcndbaiducdn

CDN 使用的是请求资源的镜像缓存,用户请求资源时,CDN 服务器从源服务器拉去资源缓存并响应给客户端,后续的请求如果缓存未失效,请求由对应的节点响应

如果在服务商配置了 cdn 缓存,要想更新缓存,可以采用静态资源可以通过添加时间戳或者到服务器后台更新下缓存

对于不需要缓存的动态资源,可以在 cdn 服务器的后台进行配置缓存过期时间为 0

推荐阅读:CDN 加速原理CDN 相关配置