一,HTTP協議
HTTP協議是超文本傳輸協議的縮寫,是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議。
(超文本是用超鏈接的方法,將各種不同空間的文字信息組織在一起的網狀文本)
HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML文件,圖片文件,查詢結果等)
HTTP是一個屬於應用層的面向對象的協議,工作於客戶端-服務器端架構爲上。
瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接受到請求後,向客戶端發送響應信息。
二,HTTP協議特點
1,簡單快速
客戶向服務器請求服務時,只需傳送請求方法和路徑。
請求方法常有的有GET,HEAD,POST。每種方法規定了客戶與服務器聯繫的類型不同
由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快
2,靈活
HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記
3,無連接
無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間
TCP的面向連接是傳輸層的,而HTTP的無連接則是應用層的 。
簡單點講就是,比如發快遞,我只需要知道對方地址,然後把包裹給快遞公司發送過去就行,我自己不用清除對面在哪,再寄包裹時,又要重新郵寄。比如HTTP只需要知道源地址和目的地址就行了。
而有狀態就比如TCP,需要兩個人同時在線,可以互相聯繫。發送時需要先建立連接
4,無狀態
HTTP協議是無狀態協議。無狀態是指協議對於事物處理沒有記憶能力。
缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。
另一方面,在服務器不需要先前信息時它的應答就較快。
就是沒有記憶,一件事完成後,就忘記了。即下一次的http請求與上一次的http
5,支持B/S及C/S模式
6,默認端口80
7,基於TCP協議
三,HTTP過程概述
HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。
HTTP協議採用了請求/響應模型。
客戶端向服務器發送一個請求報文,請求報文包含請求的方法,URL,協議版本,請求頭部和請求數據。
服務器以一個狀體行作爲響應,響應的內容包括協議的版本,成功或者錯誤代碼,服務器信息,響應頭部和響應數據。
HTTP請求/響應的步驟如下:
- 客戶端連接到Web服務器
一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認爲80)建立一個TCP套接字連接 - 發送HTTP請求
通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行,請求頭部,空行和請求數據4部分組成 - 服務器接收請求並返回HTTP響應
Web服務器解析請求,定位請求資源。
服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行,響應頭部,空行和響應數據4部分組成 - 釋放連接TCP連接
若connection模式爲close,則服務器主動關閉Tcp連接;
若connection模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求 - 客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。
然後解析每一個響應頭,響應頭告知以下爲若干字節的HTML文檔和文檔的字符集。
客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示
舉例:
在瀏覽器地址欄鍵入URL,按下回車之後會經歷以下流程:
- 瀏覽器向DNS服務器請求解析該URL中的域名所對應的IP地址;
- 解析出IP地址後,根據該IP地址和默認端口80,和服務器建立TCP連接;
- 瀏覽器發出讀取文件(URL中域名後面部分對應的文件)的HTTP請求,該請求報文作爲TCP三次握手的第三個報文的數據發送給服務器;
- 服務器對瀏覽器請求做出響應,並把對應的html文本發送給瀏覽器;
- 釋放Tco連接;
- 瀏覽器將該html文本顯示內容