一、HTTP簡介
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用于從www服務器傳輸超文本到本地瀏覽器的傳送協議;目前普遍使用的版本是HTTP 1.1.
二、HTTP在TCP/IP模型的位置
HTTP協議通常承載于TCP協議之上;有時也承載于TLS或SSL協議層之上,這時就是常說的HTTPS。
如下圖所示:
默認HTTP的端口號為80,HTTPS的端口號為443
三、HTTP工作流程
1、客戶端連接到Web服務器即TCP連接
一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接
2、發送HTTP請求
通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
3、服務器接受請求并返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
4、釋放連接TCP連接
若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;
5、客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼。然后解析每一個響應頭,響應頭告知以下為若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。
四、HTTP的請求響應模型
HTTP工作模式如下圖:
1.HTTP協議無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端
2.HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系
五、HTTP請求消息
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的一般格式。
六、HTTP響應消息
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文
七、HTTP之狀態碼
? ? ? ? ? 狀態代碼分5種類別:
? ? ? ? ? ? ?常見狀態碼:
八、HTTP常用請求報文頭
Accept:告訴服務器,客戶端支持的數據類型。
Accept-Charset:告訴服務器,客戶端采用的編碼。
Accept-Encoding:告訴服務器,客戶機支持的數據壓縮格式。
Accept-Language:告訴服務器,客戶機的語言環境。
Host:客戶機通過這個頭告訴服務器,想訪問的主機名。
If-Modified-Since:客戶機通過這個頭告訴服務器,資源的緩存時間。
Referer:客戶機通過這個頭告訴服務器,它是從哪個資源來訪問服務器的。(一般用于防盜鏈)
User-Agent:客戶機通過這個頭告訴服務器,客戶機的軟件環境。
Cookie:客戶機通過這個頭告訴服務器,可以向服務器帶數據。
Connection:客戶機通過這個頭告訴服務器,請求完后是關閉還是保持鏈接。
Date:客戶機通過這個頭告訴服務器,客戶機當前請求時間。
九、HTTP常用響應報文頭
Location:這個頭配合302狀態碼使用,告訴用戶端找誰。
Server:服務器通過這個頭,告訴瀏覽器服務器的類型。
Content-Encoding:服務器通過這個頭,告訴瀏覽器數據采用的壓縮格式。
Content-Length:服務器通過這個頭,告訴瀏覽器回送數據的長度。
Content-Language:服務器通過這個頭,告訴服務器的語言環境。
Content-Type:服務器通過這個頭,回送數據的類型
Last-Modified:服務器通過這個頭,告訴瀏覽器當前資源的緩存時間。
Refresh:服務器通過這個頭,告訴瀏覽器隔多長時間刷新一次。
Content-Disposition:服務器通過這個頭,告訴瀏覽器以下載的方式打開數據。
Transfer-Encoding:服務器通過這個頭,告訴瀏覽器數據的傳送格式。
ETag:與緩存相關的頭。
Expires:服務器通過這個頭,告訴瀏覽器把回送的數據緩存多長時間。-1或0不緩存。
Cache-Control和Pragma:服務器通過這個頭,也可以控制瀏覽器不緩存數據。
Connection:服務器通過這個頭,響應完是保持鏈接還是關閉鏈接。
Date:告訴客戶機,返回響應的時間。