// 说出几个http协议状态码?
// 200, 201, 302, 304, 400, 404, 500
// 200:请求成功
// 201:请求成功并且服务器创建了新的资源
// 302:服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
// 304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
// 客户端是怎么知道这些内容没有更新的呢?其实这并不是客户端的事情,而是你服务器的事情,大家都知道服务器可以设置缓存机制,这个功能是为了提高网站的访问速度,
// 当你发出一个GET请求的时候服务器会从缓存中调用你要访问的内容,这个时候服务器就可以判断这个页面是不是更新过了,如果未更新过那么他会给你返回一个304状态码。
// 400:服务器不理解请求的语法。
// 404:请求的资源(网页等)不存在
// 500: 内部服务器错误
// 1xx:指示信息--表示请求已接收,继续处理。
// 2xx:成功--表示请求已被成功接收、理解、接受。
// 3xx:重定向--要完成请求必须进行更进一步的操作。
// 4xx:客户端错误--请求有语法错误或请求无法实现。
// 5xx:服务器端错误--服务器未能实现合法的请求。
// http——超文本传输协议资源
//   https——用安全套接字层传送的超文本传输协议 解决 流量劫持和隐私数据劫持。
//   ftp——文件传输协议
//   mailto——电子邮件地址
//   ldap——轻型目录访问协议搜索
//   file——当地电脑或网上分享的文件
//   news——Usenet新闻组
//   gopher——Gopher协议
//   telnet——Telnet协议
// http请求中的常用头(请求头)的含义:
// Accept:告诉服务器,客户端支持的数据类型。
// Host:客户机通过这个头告诉服务器,想访问的主机名。
// Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
// Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。
function https() {
// 二、HTTP和HTTPS协议的区别
// 1、https协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。
// 2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
// 3、http和https使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。
// 4、http的连接很简单,是无状态的 。
// 5、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。
// 从上面可看出,HTTPS和HTTP协议相比提供了
// 数据完整性:内容传输经过完整性校验
// 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
// 身份认证:第三方无法伪造服务端(客户端)身份
// 其中,数据完整性和隐私性由TLS Record Protocol保证,身份认证由TLS Handshaking Protocols实现。
// 握手的时候使用的非对称加密算法 ,用来加密握手之后的请求和应答
// 传输信息的时候使用的对称加密,
// 保证数据的完整性用的是hash算法(数字签名)
// HTPS的工作过程
// 1.客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了
// 2.服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构
// 3.客户端收到网站的证书之后要做下面的事情:
// 1.验证证书的合法性
// 2.如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密
// 3.用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器
// 4.服务器接收到客户端传送来的信息,要求下面的事情:
// 1.用私钥解析出密码,,用密码解析握手消息,验证hash值是否和浏览器发来的一致
// 2.使用密钥加密消息,回送
// 5.如果计算法hash值一致,握手成功
}
function http2与1区别() {
// 与HTTP 1.1相比,主要区别包括:
// HTTP/2采用二进制格式而非文本格式
// HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
// 使用报头压缩,HTTP/2降低了开销
// HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
}
function 三次握手四次挥手() {
// 1. TCP建立连接为什么需要三次握手,两次不行吗?
// 答:在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
// “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,
// 而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server,
// 本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,
// 就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。
// 为什么建立连接需要3次,而关闭连接需要4次?
// 关闭连接时,当Server端收到FIN报文时,
// 很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,。
// 只有等到Server端所有的报文都发送完了,才能发送FIN报文,ACK和FIN不能一起发送,所以多一次。
// 三次握手
// A对B说:我的序号是x,我要向你请求连接;(第一次握手,发送SYN包,然后进入SYN-SEND状态)
// B听到之后对A说:我的序号是y,期待你下一句序号是x+1的话(意思就是收到了序号为x的话,即ack=x+1),同意建立连接。(第二次握手,发送ACK-SYN包,然后进入SYN-RCVD状态)
// A听到B说同意建立连接之后,对A说:与确认你同意与我连接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已进入ESTABLISHED状态)
// B听到A的确认之后,也进入ESTABLISHED状态。
// 四次挥手
// 1.A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1)
// 2.B收到A的消息后说:确认,你要关闭连接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT)
// 3.A收到B的确认后,等了一段时间,因为B可能还有话要对他说。(此时A进入FIN-WAIT-2)
// 4.B说完了他要说的话(只是可能还有话说)之后,对A说,我要关闭连接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手)
// 5.A收到B要结束连接的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,然后A进入CLOSED)
// 6.B收到A的确认后,也进入CLOSED。
}
function tcpUdp() {
// TPC/UDP协议是传输层协议,有状态,主要解决数据如何在网络中传输。
// HTTP是应用层协议,无状态,主要解决如何包装数据。
// 最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
// Socket是对TCP的封装,它相当于一个调用接口,通过Socket,使用TCP协议。
// UDP和TCP协议的主要区别:
// TCP面向连接的,在正式收发数据前,必须和对方建立可靠的连接。
// UDP面向非连接的,它不与对方建立连接,而是直接就把数据包发送过去。 适用于一次只传送少量数据、对可靠性要求不高的应用环境
//
// TCP UDP
// 面向连接 面向非连接
// 可靠 不可靠
// 传输大量数据 少量数据
// 慢 快
//
}
function 为什么tcp就是可靠的() {
// [1] 确认和重传机制
// 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
// 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
// [2] 数据排序
// TCP有专门的序列号SN字段,可提供数据re-order
// [3] 流量控制
// 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
// [4] 拥塞控制
// TCP的拥塞控制由4个核心算法组成。
// “慢启动”(Slow Start)
// “拥塞避免”(Congestion avoidance)
// “快速重传 ”(Fast Retransmit)
// “快速恢复”(Fast Recovery)
}