HTTP是什么
http是超文本传输协议
HTTP状态码
2XX 成功,报文已经收到并被正确处理
3XX重定向,资源位置发生变动,需要客户端发送请求
4XX客户端错误,请求报文有误,服务端无法处理
5XX服务器错误,服务器在处理请求时内部发生了错误
HTTP常见字段
host字段 客户端发送请求时,用来指定服务器的域名
content-length字段 服务器在返回数据时,会有content-length字段,表明本次回应的数据长度
connection字段 最常用客户端要求服务器使用http长连接机制,以便其他请求复用
content-type字段 用于服务器回应时,告诉客户端,本次数据是什么格式
content-encoding字段 说明数据的压缩方法,表示服务器返回的数据使用了什么压缩格式
get和post有什么区别
get是从服务器获取指定的资源
post是根据请求负荷对指定的资源作出处理
Get和post方法都是安全和幂等吗
get方法就是安全且幂等的,都是只读操作。post是新增或提交操作,会修改服务器的资源,所以不安全,且多次提交数据就会创建多个资源,所以不是幂等的。浏览器一般不会缓存post请求,也不能把post请求保存为书签
HTTP/1.1的优点有哪些
http基本的报文格式就是header+body,头部信息也是key-value简单文本的形式
http协议各类请求方法,状态码,头字段都没有固定死,都允许自定义或扩充
http具有天然的跨平台特性
Http/1.1的缺点有哪些
无状态的好处,因为服务器不会去记忆http状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,但是由于没有记忆能力,完成有关联性的操作时会非常麻烦
采用明文传输,安全性降低
HTTP/1.1性能如何
http协议是基于TCP/IP,并且使用了请求-应答的通信模式
使用长连接的通信方式,减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务端的负载
使用管道网络传输的方式,一个TCP连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发送第二个请求,可以减少整体的响应时间
HTTP和HTTPS有哪些区别
HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题,https则解决http不安全的缺陷,在tcp和http网络层之间加入了ssl/tls安全协议,使得报文能够加密传输
http连接建立相对简单,tcp三次握手之后便可进行http报文传输,而https在tcp三次握手之后,还需进行ssl/tls的握手过程,才可进行加密报文传输
两者的默认端口不一样 http默认端口号是80 https默认端口号是443
https协议采用CA证书权威机构申请数字证书,来保证服务器身份是可信的
Http1.1优点
http/1.1使用长连接的方式改善了HTTP/1.0短链接的性能开销
支持管道pipeline网络传输,只要第一个请求发出去了,不必等其回来,就可以发出第二个请求出去,可以减少整体的响应时间
HTTP/2优点
http/2协议是基于https的,所以http/2的安全性也是有保障的
http/2采用头部压缩,如果同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分
http/2采用二进制格式,头信息和数据体都是二进制,并且统称为帧:头信息帧和数据帧
http/2采用并发传输,多条stream复用一条tcp连接
http/2采用服务器推送,服务端不再被动响应,可以主动向客户端发送信息
HTTP/3的优点
http/3采用基于UDP的QUIC协议,可以实现可靠性传输
TCP头格式有哪些
序列号:在建立连接时由计算机生成的随机数作为初始值,通过SYN包传给接受端主机,每发送一次数据,就累加一次该数据字节数的大小,用来解决网络包乱序的问题
确认应答号:指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接受,用来解决丢包的问题
控制位:
ACK:确认应答字段变为有效
SYN:表示希望建立连接,并在其序列号的字段进行序列号初始值的设定
FIN:表示今后不会再有数据发送,希望断开连接
什么是TCP
TCP是面向连接的,可靠的,基于字节流的传输层通信协议
面向连接:一定是一对一才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息
可靠的:无论链路怎么变化,TCP都可以保证一个报文一定能够到达接受端
字节流:用户消息通过TCP协议传输时,消息可能会被操作系统分组程多个TCP报文,如果接受方的程序
重传机制
TCP实现可靠传输的方式之一,是通过序列号与确认应答。在TCP中,当发送端的数据到达主机时,接受端主机会返回一个确认应答消息,表示已经收到消息
滑动窗口
窗口大小是指无需确认应答,而继续发送数据的最大值。窗口的实现实际是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据,如果按期收到确认应答,此时数据就可以从缓冲区清除
流量控制
TCP提供一种机制可以让发送方根据接受方的实际接受能力控制发送的数据量
拥塞控制
引入拥塞控制,目的就是避免发送方的数据填满整个网络。拥塞窗口cwnd是发送方维护的一个的状态变量,他会根据网络的拥塞程度动态变化。只要网络中没有出现拥塞,cwnd就会增大,但是网络中出现了拥塞,cwnd就减少。
ICMP协议
主要作用是确认IP包是否成功送达目标地址,报送发送过程中IP包被废弃的原因和改善网络设置
在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么原因则由ICMP负责通知
ICMP包头的类型字段分为两类:
一类是用于诊断的查询消息,就是查询报文类型
二类是通知出错原因的错误消息,就是差错报文类型
查询报文类型,回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经到达对端的一种消息,ping 命令就是利用这个消息实现的。
ping命令执行的时候,源主机首先会构建一个ICMP回送请求消息数据包
ICMP数据包内包含多个字段,最重要的是两个:
第一个是类型,对于回送请求消息而言该字段为8
另一个是序号,主要用于区分连续ping的时候发出的多个数据包
每发出一个请求数据包,序号会自动加1,为了能够计算往返时间RTT,他会在报文的数据部分插入发送时间。
然后由ICMP协议将这个数据包连同地址xxx.xxx.xxx.xxx一起交给IP层,IP层将以xxx.xxx.xxx.xxx地址作为目的地址,本机IP地址作为源地址,协议字段设置为1表示是ICMP协议,再加上一些其他控制信息,构建成一个IP数据包。
接下来,需要加入MAC头,如果在本地ARP映射表中查找出IP地址xxx.xxx.xxx.xxx所对应的MAC地址,则可以直接使用。如果没有,则需要发送ARP协议查询MAC地址,获得MAC地址后,由数据链路层构建一个数据帧,目的地址是IP层传送过来的MAC地址,源地址则是本机的MAC地址,还需要附加上一些控制信息,依据以太网的介质访问规则,将他们传送出去。
主机B收到这个数据帧后,先检查他的目的MAC地址,并和本机的MAC地址对比,如果符合,则接受,否则就丢弃。
接受后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层,同样IP层检查后,将有用的信息提取后交给ICMP协议
主机B会构建一个ICMP回送响应消息数据包,回送响应数据包的类型字段为0,序号为接受到的请求数据包中的序号,然后再发送出去给主机A。
在规定的时间内,源主机如果没有接到ICMP应答包,则说明目标主机不可达,如果接受到了ICMP回送响应消息,则说明目标主机可达。此时源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是ICMP数据包的时间延迟