1. HTTP 響應碼 301 和 302 代表的是什么?有什么區別?
301:永久重定向。 302:暫時重定向。
它們的區別是,301 對搜索引擎優化(SEO)更加有利;302 有被提示為網絡攔截的風險。
2. 簡單說一下http協議?
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。HTTP是一個基于TCP/IP通信協議被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密。
3. HTTP與HTTPS的區別?
- https協議需要到CA申請證書,一般免費證書較少,因而需要一定費用。
- http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協議。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL/TLS+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
4. HTTP協議下客戶端請求報文是什么?
HTTP請求由四個部分組成,分別是:
- 請求行(request line)
- 請求頭部(header)
- 空行
- 請求數據
5. HTTP協議服務器響應報文有哪些?
HTTP響應也由四個部分組成,分別是:
- 狀態行
- 消息報頭
- 空行
- 響應正文
6. HTTP協議中的請求方法有哪些?
一共八種請求方法:GET, POST ,HEAD,OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
方法 | 描述 |
GET | 請求指定的頁面信息,并返回實體主體。 |
POST |
向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。 POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
HEAD | 類似于get請求,只不過返回的響應中沒有具體的內容,用于獲取報頭 |
OPTIONS | 允許客戶端查看服務器的性能。 |
PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
DELETE | 請求服務器刪除指定的頁面。 |
TRACE | 回顯服務器收到的請求,主要用于測試或診斷。 |
CONNECT | HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器 |
7. 常見的HTTP狀態碼有哪些?
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收并顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。
HTTP狀態碼的英文為HTTP Status Code。下面是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
8. forward 和 redirect 的區別?
- forward 是轉發 和 redirect 是重定向:
- 地址欄 url 顯示:foward url 不會發生改變,redirect url 會發生改變;
- 數據共享:forward 可以共享 request 里的數據,redirect 不能共享;
- 效率:forward 比 redirect 效率高。
9. 簡述 tcp 和 udp的區別?
tcp 和 udp 是 OSI 模型中的運輸層中的協議。tcp 提供可靠的通信傳輸,而 udp 則常被用于讓廣播和細節控制交給應用的通信傳輸。 兩者的區別大致如下:
- tcp 面向連接,udp 面向非連接即發送數據前不需要建立鏈接;
- tcp 提供可靠的服務(數據傳輸),udp 無法保證;
- tcp 面向字節流,udp 面向報文;
- tcp 數據傳輸慢,udp 數據傳輸快;
10. TCP 為什么要三次握手,兩次不行嗎?為什么?
如果采用兩次握手,那么只要服務器發出確認數據包就會建立連接,但由于客戶端此時并未響應服務器端的請求,那此時服務器端就會一直在等待客戶端, 這樣服務器端就白白浪費了一定的資源。若采用三次握手,服務器端沒有收到來自客戶端的再此確認,則就會知道客戶端并沒有要求建立請求,就不會浪費服務器的資源。
11. 說一下 TCP 粘包是怎么產生的?
TCP 粘包可能發生在發送端或者接收端,分別來看兩端各種產生粘包的原因:
- 發送端粘包:發送端需要等緩沖區滿才發送出去,造成粘包;
- 接收方粘包:接收方不及時接收緩沖區的包,造成多個包接收。
12. OSI 的七層模型都有哪些?
- 物理層:利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸。
- 數據鏈路層:負責建立和管理節點間的鏈路。
- 網絡層:通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑。
- 傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
- 會話層:向兩個實體的表示層提供建立和使用連接的方法。
- 表示層:處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密等。
- 應用層:直接向用戶提供服務,完成用戶希望在網絡上完成的各種工作。
13. GET和POST的區別?
POST和GET都是向服務器提交數據,并且都會從服務器獲取數據。
1、傳送方式:get通過地址欄傳輸,post通過報文傳輸。
2、傳送長度:get參數有長度限制(受限于url長度),而post無限制
3、GET和POST還有一個重大區別,簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包
長的說:
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據);
而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;
2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;
14. 如何實現跨域?
實現跨域有以下幾種方案:
服務器端運行跨域 設置 CORS 等于 *;
在單個接口使用注解 @CrossOrigin 運行跨域;
使用 jsonp 跨域;
15. 什么是WebSocket?
WebSocket是一種在單個TCP連接上進行全雙工通信的協議。
WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。
16. WebSocket與HTTP的關系
相同點
1. 都是一樣基于TCP的,都是可靠性傳輸協議。
2. 都是應用層協議。
不同點
1. WebSocket是雙向通信協議,模擬Socket協議,可以雙向發送或接受信息。HTTP是單向的。
2. WebSocket是需要握手進行建立連接的。
聯系
WebSocket在建立握手時,數據是通過HTTP傳輸的。但是建立之后,在真正傳輸時候是不需要HTTP協議的。
17. WebSocket與Socket的關系
Socket其實并不是一個協議,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應用層和傳輸控制層之間的一組接口。
當兩臺主機通信時,必須通過Socket連接,Socket則利用TCP/IP協議建立TCP連接。TCP連接則更依靠于底層的IP協議,IP協議的連接則依賴于鏈路層等更低層次。WebSocket則是一個典型的應用層協議。
區別
Socket是傳輸控制層協議,WebSocket是應用層協議。
總結
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/javanbme/article/details/117520214