**1. http 響應碼 301 和 302 代表的是什么?有什么區別?**
301:永久重定向。
302:暫時重定向。
它們的區別是,301 對搜索引擎優化(SEO)更加有利;302 有被提示為網絡攔截的風險。
*****
**2. forward 和 redirect 的區別?**
forward 是轉發 和 redirect 是重定向:
- 地址欄 url 顯示:foward url 不會發生改變,redirect url 會發生改變;
- 數據共享:forward 可以共享 request 里的數據,redirect 不能共享;
- 效率:forward 比 redirect 效率高。
*****
**3. 簡述 tcp 和 udp的區別?**
tcp 和 udp 是 OSI 模型中的運輸層中的協議。tcp 提供可靠的通信傳輸,而 udp 則常被用于讓廣播和細節控制交給應用的通信傳輸。
兩者的區別大致如下:
- tcp 面向連接,udp 面向非連接即發送數據前不需要建立鏈接;
- tcp 提供可靠的服務(數據傳輸),udp 無法保證;
- tcp 面向字節流,udp 面向報文;
- tcp 數據傳輸慢,udp 數據傳輸快;
*****
**4. tcp 為什么要三次握手,兩次不行嗎?為什么?**
如果采用兩次握手,那么只要服務器發出確認數據包就會建立連接,但由于客戶端此時并未響應服務器端的請求,那此時服務器端就會一直在等待客戶端,這樣服務器端就白白浪費了一定的資源。若采用三次握手,服務器端沒有收到來自客戶端的再此確認,則就會知道客戶端并沒有要求建立請求,就不會浪費服務器的資源。
*****
**5. 說一下 tcp 粘包是怎么產生的?**
- 發送端粘包:發送端需要等緩沖區滿才發送出去,造成粘包;
- 接收方粘包:接收方不及時接收緩沖區的包,造成多個包接收。
*****
**6. OSI 的七層模型都有哪些?**
- 物理層:利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸。
- 數據鏈路層:負責建立和管理節點間的鏈路。
- 網絡層:通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑。
- 傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
- 會話層:向兩個實體的表示層提供建立和使用連接的方法。
- 表示層:處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密等。
- 應用層:直接向用戶提供服務,完成用戶希望在網絡上完成的各種工作。
*****
**7. get 和 post 請求有哪些區別?**
- get 請求會被瀏覽器主動緩存,而 post 不會。
- get 傳遞參數有大小限制,而 post 沒有。
- post 參數傳輸更安全,get 的參數會明文限制在 url 上,post 不會。
*****
**8. 如何實現跨域?**
實現跨域有以下幾種方案:
- 服務器端運行跨域 設置 CORS 等于 *;
- 在單個接口使用注解 @CrossOrigin 運行跨域;
- 使用 jsonp 跨域;
*****
**9. 說一下 JSONP 實現原理?**
jsonp:JSON with Padding,它是利用script標簽的 src 連接可以訪問不同源的特性,加載遠程返回的“JS 函數”來執行的。
*****