80、forward和redirect的区别?
地址栏显示: forward url不会发生变化 , redirect url会发生变化
数据共享:forward 可以共享request里的数据,redirect不能共享
效率: forward效率比redirect高
本质上来说: forward转发是服务器的行为,而redirect重定向是客户端的行为
请求次数: forward是一次请求, 而redirect有两次请求。
81. 简述tcp与udp的区别?
tcp和udp是OSI模型中的运输层中的协议。tcp提供一种面向连接的、可靠的字节流服务,而udp则常被用于让广播和细节控制交给应用的通信协议。
两者的区别大致如下:
tcp面向连接,udp面向非连接(即发送数据前不需要建立链接)
tcp提供可靠的服务(数据传输), udp无法保证。
tcp面向字节流,udp面向报文
tcp数据传输慢, udp数据传输快。
补充1: 传输控制协议TCP简介
面向连接的、可靠的,基于字节流服务的传输通信协议
将应用层的数据流分割成报文段,并发送给目标节点的TCP层
数据包都有序号,对方收到则发送ACK确认,未收到则重传。
使用校验和来检验数据在传输过程中是否有误。
补充2:

(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3) 标志位 TCP Flags
URG:紧急指针标志
ACK: 确认序号有效标志
PSH: push标志,接收方应该尽快将这个报文交给应用层
RST: 重置连接标志
SYN: 同步序号,发起一个新连接
FIN: finish标志,用于释放连接 (为1表示发送方没有数据发送,并关闭本方数据流。)
window: 滑动窗口大小,用于告诉发送端,接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。
checksum: 检验和,奇偶校验。校验整个TCP报文头,存储在发送端,由接收端进行校验。
Urgent Pointer:紧急指针。
当应用程序通过TCP与另一个程序进行通信时,它会发一个通信请求。双方握手之后,TCP在应用之间建立一个全双工的通信,这个全双工的通信,将占用两个计算机之间的通信线路,直到被一方或者双方关闭为止。
82、tcp为什么要三次握手,两次不行吗?
如果才有两次握手,那么只要服务器发出确认数据包就会建立连接,但由于此时客户端并没有相应服务器的请求,
那此时服务器就会一直在等待客户端,这样服务器就白白浪费了一定的资源
若才有三次握手,服务器没有收到客户端的确认,就会知道客户端没有要求建立请求,就不会浪费服务器的资源。
问题起因:
Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
Server不断重试直到超时,Linux默认等待63秒钟才端口连接。
恶意程序向服务器发送SYN报文,发了之后就下线了。服务器需要默认等63秒才会断开连接。这样攻击者可以把服务器连接SYN的队列耗尽,让正常的连接请求不能处理。
补充1: 什么是TCP的三次握手?
第一次握手:Client将标志位SYN置为1(表示要发起一个连接),随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=x+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
83、什么是tcp粘包,tcp粘包是如何产生的?
TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包。从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。
产生原因: 发送端需要等缓冲区满才发送出去,造成粘包。
接收端不及时接收缓冲区的包,造成多个包接收。
85、get 和post有什么区别?
get请求可以被浏览器缓存
get参数大小有限制,post则没有
post更加安全,get的参数明文显示
86、如何实现跨域
实现跨域有以下几种方案
1、服务器端运行跨域,设置CORS等于*
2、在单个接口使用注解 @CrossOrigin 运行跨域
3、使用jsonp跨域