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跨域