Http--Hyper Text Transfer Protocol 超文本傳輸協議
傳輸協議:定義了客戶端和服務器端通信時,發送數據的格式Http協議的特點
- 基於TCP/IP的高級協議,默認端口是80
- 基於請求/響應模型的:一次請求對應一次響應
- 無狀態的:每次請求之間相互獨立,不能交互數據
Http協議的歷史版本
- 1.0版本
每次請求響應之後都會斷開連接,下一次請求響應又會建立新的連接,即每次請求響應都會建立新的連接
缺點:連接會被多次建立和多次丟棄掉,影響傳輸速度,消耗資源 - 1.1版本
在一次請求響應之後,連接不會立刻斷開,而是會等待一定的時間,如果在這一定時間內,還有其他請求,就會默認使用該連接,而不去建立新的連接,這樣就實現了連接的複用
上面說了,Http定義了客戶端和服務器通信時傳輸數據的格式,而傳輸數據分爲兩種:
客戶端向服務器傳輸數據:請求消息數據
服務器向客戶端傳輸數據:相應消息數據
1、Http請求消息數據格式
- 請求行:請求方式 請求url 請求協議/版本
例如:GET /login.html HTTP/1.1
請求url=虛擬路徑+Servlet資源路徑 - 請求頭:客戶端瀏覽器告訴服務器一些信息
請求頭消息以鍵值對的方式給出:請求頭名稱:請求頭值
常見的請求頭:- User-Agent:瀏覽器告訴服務器,使用的瀏覽器版本信息,可以在服務器端獲取該頭的信息,解決瀏覽器的兼容性問題(可以在服務器端對不同的服務器寫不同的邏輯代碼,然後根據該頭的內容獲取瀏覽器名稱,執行對應瀏覽器的代碼)
- Referer:告訴服務器,當前請求從哪裏來?可以用來防盜鏈和統計工作
- 請求空行:一個空行,用於分割請求頭和請求體
- 請求體(正文):封裝POST請求消息的請求參數
對於請求行中的請求方式,http協議7中請求方式,常用的有2種
- GET:
請求參數在請求行中,跟在url後。
請求的url長度有限制的
不太安全 - POST:
請求參數在請求體中
請求的url長度沒有限制的
相對安全
2、Http響應消息數據格式
- 響應行:協議/版本 響應狀態碼 狀態碼描述
例如:HTTP/1.1 200 OK
請求url=虛擬路徑+Servlet資源路徑 - 響應頭:服務器告訴瀏覽器一些信息
響應頭消息以鍵值對的方式給出:響應頭名稱:響應頭值
常見的響應頭:- Content-Type:服務器告訴客戶端本次響應體數據格式以及編碼格式
- Content-disposition:服務器告訴客戶端以什麼格式打開響應體數據
- 常見有兩種取值
- in-line:默認值,在當前頁面內打開
- attachment;filename=xxx:以附件形式打開響應體,用於文件下載
注意:這個filename是瀏覽器在彈出框顯示,和服務器中要下載的文件名無關
- 響應空行:一個空行,用於分割響應頭和響應體
- 響應體(正文):傳輸的數據
響應狀態碼
服務器告訴客戶端瀏覽器本次請求和響應的一個狀態。狀態碼都是3位數字
- 1xx:服務器接收客戶端消息,但沒有接受完成,等待一段時間後,發送1xx多狀態碼
- 2xx:本次請求響應成功。代表碼:200
- 4xx:客戶端錯誤。
- 404:請求路徑沒有對應的資源-->路徑錯誤
- 405:請求方式沒有對應的doxxx方法-->比如瀏覽器請求方式是Post方式,而客戶端沒有doPost方法
- 5xx:服務器端錯誤。代表碼:500(服務器內部出現異常)