总结了一下自己掌握的网络知识点,持续更新和完善
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