HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務器模型
HTTP:Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,HTTP是一個基於TCP/IP通信協議來傳遞數據,默認端口號為80
特點:無連接:限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
媒體獨立的:只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型
無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接
傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
HTTP/1.0 這是第一個在通訊中指定版本號的HTTP 協議版本,至今仍被廣泛采用,特別是在代理服務器中
HTTP/1.1 當前版本。持久連接被默認采用,並能很好地配合代理服務器工作。還支持以管道方式同時發送多個請求,以便降低線路負載,提高傳輸速度
HTTP/1.0和HTTP/1.1支持的方法
HTTP工作原理
HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端
HTTP 請求/響應的步驟
1、客戶端連接到Web服務器
一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接。例如,http://www.oakcms.cn。
2、發送HTTP請求
通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
3、服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
4、釋放連接TCP連接
若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;
5、客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼。然后解析每一個響應頭,響應頭告知以下為若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
例如:在瀏覽器地址欄鍵入URL,按下回車之后會經歷以下流程:
1、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址后,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;
3、瀏覽器發出讀取文件(URL 中域名后面部分對應的文件)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的數據發送給服務器;
4、服務器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器;
5、釋放 TCP連接;
6、瀏覽器將該 html 文本並顯示內容;
消息結構
HTTP是基於客戶端/服務端(C/S)的架構模型
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,
請求報文的一般格式
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
(以新華網為例)
請求消息
響應消息
HTTP首部字段根據用途分為4種
通用首部字段:
請求首部字段
響應首部字段
使用Cookie的狀態管理。
HTTP是無狀態協議,由於是無狀態不必保存狀態,自然減少了服務器的CPU及內存消耗。保留無狀態特征又要解決登錄狀態問題,所以引入了cookie技術。cookie技術通過在請求和響應報文中寫入cookie來控制客戶端狀態。
cookie會根據從服務器端發送的響應報文中叫做Set-Cookie的首部字段,通知客戶端保存Cookie,一個簡單的cookie
Set-Cookie: <cookie名>=<cookie值>
,下次再請求的時候客戶端自動在請求報文中加入Cookie值發送出去。服務器發現客戶端發送的Cookie,檢查是從哪個客戶端發來的,對比服務器記錄。得到之前的狀態。
給客戶端頒發一個通行證,訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。
~ Cookie具有不可跨域名性
~ Cookie在客戶端是由瀏覽器來管理的