http:hyper text transfer protocol超文本傳輸協定。網際網路應用最廣泛的網絡協定,主要用于web服務。格式為HTML超文本标記語言來實作。
協定的版本:
http0.9:僅于使用者傳輸html文檔
http1.0:1,引用了mime機制:多用途網際網路郵件擴充,http可以發送多媒體資訊,此機制讓http不在單單隻支援html格式,還可以支援其他格式進行發送。
2,引用了keep-alive機制,支援持久連接配接的功能(在首部添加了某個字段而形成的,并非原生就支援此功能)
3,引用支援緩存功能
http1.1:支援更多的請求方法,更加精細的緩存控制,原生直接支援持久連接配接功能。目前常用的版本
http2.0:提供了http語義優化的傳輸,能夠加速http資料互動,尤其是使用ssl加速機制。大師spdy現在用的還不多。
html文本架構:
<a href="https://s2.51cto.com/wyfs02/M00/8F/A0/wKioL1jnM1HzQDwkAAAWr-XMde8527.png-wh_500x0-wm_3-wmp_4-s_3084636211.png" target="_blank"></a>
html文檔生成方式:
靜态:事先就編譯并定義完成的
<a href="https://s2.51cto.com/wyfs02/M00/8F/A2/wKiom1jnNA6CCMpXAADFW2-ZkYg997.png-wh_500x0-wm_3-wmp_4-s_407477554.png" target="_blank"></a>
1,web伺服器向核心注冊socket
2,用戶端通過浏覽器向web伺服器發起request請求
3,web伺服器收到用戶端的request資訊
4,如果使用者請求的資源在伺服器本地,http伺服器會向系統核心申請調用
5,核心調用本地磁盤裡的資料,并将資料發送http服務
6,http将使用者請求的資源通過response封包響應用戶端
動态:通過編譯語言編寫的程式輸出html格式的結果。動态語音有:php,jsp,asp,.net。這些語音都必須有相應的解釋器。
<a href="https://s4.51cto.com/wyfs02/M00/8F/A0/wKioL1jnNBrTmgPFAADfagRRtK0607.png-wh_500x0-wm_3-wmp_4-s_1689049244.png" target="_blank"></a>
使用者請求的是動态内容,http服務會調用後端的解析器,有動态語言去處理使用者的請求,需要請求資料的時候,會向核心申請調用,進而向磁盤中擷取使用者指定的資料,通過解釋器運作,運作的結果會生成html格式的檔案,然後建構響應封包,最終發回給用戶端。
http封包中存在很多行内容,一般是由ASCLL碼組成,各字段長度不确定。http封包可分為請求封包與響應封包。
請求封包格式:
請求行:由請求方法字段<method>+請求URL字段<request-URL>+HTTP協定版本<version>組成。
<version>請求的協定版本,格式http/<major>.<minor>
這是用wireshark工具抓取http請求封包的顯示結果。在首部後的“\r\n”表示一個回車和換行,以此将該首部與下一個首部隔開
或者使用curl指令擷取http請求封包
請求首部
有關鍵字+關鍵字的值組成,之間使用“:”進行分隔,格式Name:Value,請求首部的作用是通過用戶端将請求的相關内容告知伺服器端,首部可以不止一個User-Agent:産生請求的浏覽器類型。Accept:用戶端可識别的内容類型清單。Host:請求的主機名,允許多個域名同處一個IP位址,即虛拟主機。
· Client-IP:用戶端 IP位址
· Host:請求的主機,這在實作基于主機名的虛拟主機時很有用
· Referer:指明了請求目前資源原始資源的URL,使用referer是可以防盜鍊
· User-Agent:使用者代理,一般而言是浏覽器
· Accept首部:指用戶端可以接受哪些編碼的類型
§ Accept:服務端能夠發送的媒體的類型
§ Accetp-Charset:接收的字元集
§ Accept-Encoding:編碼格式
§ Accept-Lanage:所能接受的語言編碼格式
· 條件式請求首部:(在http1.1中才會用到)
當發送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請求
· 跟安全相關的請求:
§ Authorization
§ Cookie
空白行
最後一個請求頭之後是一個空行,發送回車符和換行符,通知伺服器以下不再有請求頭。
請求實體
請求資料不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是Content-Type和Content-Length。
相應封包格式
起始行+響應首部+空白行+相應實體
狀态行:狀态行由 HTTP 協定版本字段、狀态碼和狀态碼的描述文本 3 個部分組成,他們之間使用空格隔開;
● 狀态碼由三位數字組成,第一位數字表示響應的類型,常用的狀态碼有五大類如下所示:
1xx:表示伺服器已接收了用戶端請求,用戶端可繼續發送請求;
2xx:表示伺服器已成功接收到請求并進行處理;
3xx:表示伺服器要求用戶端重定向;
4xx:表示用戶端的請求有非法内容;
5xx:表示伺服器未能正常處理用戶端的請求而出現意外錯誤;
● 狀态碼描述文本有如下取值:
200 OK:表示用戶端請求成功;
201:CREATED上傳檔案成功後顯示
301:Move Permanently,永久重定向,會傳回一個新位址,并告訴請求的位址将永久挪到哪個新位址
302:Fonud:臨時重定向,臨時放到某個地方,會在響應封包中使用“Location:新位置”
304:Not MOdified,資源沒有做
400 Bad Request:表示用戶端請求有文法錯誤,不能被伺服器所了解;
401 Unauthonzed:表示請求未經授權,該狀态代碼必須與 WWW-Authenticate 報頭域一起使用;
403 Forbidden:表示伺服器收到請求,但是拒絕提供服務,通常會在響應正文中給出不提供服務的原因;
404 Not Found:請求的資源不存在,例如,輸入了錯誤的URL;
500 Internal Server Error:表示伺服器發生不可預期的錯誤,導緻無法完成用戶端的請求;
503 Service Unavailable:表示伺服器目前不能夠處理用戶端的請求,在一段時間之後,伺服器可能會恢複正常;
響應頭部:響應頭可能包括:
Location:Location響應報頭域用于重定向接受者到一個新的位置。例如:用戶端所請求的頁面已不存在原先的位置,為了讓用戶端重定向到這個頁面新的位置,伺服器端可以發回Location響應報頭後使用重定向語句,讓用戶端去通路新的域名所對應的伺服器上的資源;
Server:Server 響應報頭域包含了伺服器用來處理請求的軟體資訊及其版本。它和 User-Agent 請求報頭域是相對應的,前者發送伺服器端軟體的資訊,後者發送用戶端軟體(浏覽器)和作業系統的資訊。
Vary:訓示不可緩存的請求頭清單;
Connection:連接配接方式;
對于請求來說:close(告訴 WEB 伺服器或者代理伺服器,在完成本次請求的響應後,斷開連接配接,不等待本次連接配接的後續請求了)。keepalive(告訴WEB伺服器或者代理伺服器,在完成本次請求的響應後,保持連接配接,等待本次連接配接的後續請求);
對于響應來說:close(連接配接已經關閉); keepalive(連接配接保持着,在等待本次連接配接的後續請求); Keep-Alive:如果浏覽器請求保持連接配接,則該頭部表明希望WEB 伺服器保持連接配接多長時間(秒);例如:Keep-Alive:300;
WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401 (未授權的)響應消息中,這個報頭域和前面講到的Authorization 請求報頭域是相關的,當用戶端收到 401 響應消息,就要決定是否請求伺服器對其進行驗證。如果要求伺服器對其進行驗證,就可以發送一個包含了Authorization 報頭域的請求;
空行:最後一個響應頭部之後是一個空行,發送回車符和換行符,通知伺服器以下不再有響應頭部。
響應包體:伺服器傳回給用戶端的文本資訊;
http請求方法
http通信過程中,每個http請求封包中都會包含一個http請求方法,用于告知用戶端請求執行某些具體的操作
GET: 請求指定的頁面資訊,并傳回實體主體。
HEAD: 隻請求頁面的首部。
POST: 請求伺服器接受所指定的文檔作為對所辨別的URI的新的從屬實體。
PUT: 從用戶端向伺服器傳送的資料取代指定的文檔的内容。
DELETE: 請求伺服器删除指定的頁面。
OPTIONS: 允許用戶端檢視伺服器的性能。
TRACE: 請求伺服器在響應中的實體主體部分傳回所得到的内容。
PATCH: 實體中包含一個表,表中說明與該URI所表示的原内容的差別。
MOVE: 請求伺服器将指定的頁面移至另一個網絡位址。
COPY: 請求伺服器将指定的頁面拷貝至另一個網絡位址。
LINK: 請求伺服器建立連結關系。
UNLINK: 斷開連結關系。
WRAPPED: 允許用戶端發送經過封裝的請求。
Extension-mothed:在不改動協定的前提下,可增加另外的方法。
比如:
GET /index.html HTTP/1.1
Accept: text/plain /*純ASCII碼文本檔案*/
Accept: text/html /*HTML文本檔案*/
User-Agent:Mozilla/4.5(WinNT)
說明浏覽器使用Get方法請求文檔/index.html。浏覽器則隻允許接收純ASCII碼文本檔案和HTML文本檔案,其使用的引擎是Mozilla/4.5(Netscape)。
http常用的請求頭
Accept:浏覽器可接受的MIMIE類型
Accept-Charset:浏覽器可接受的字元集
Accept-Encoding:浏覽器能夠進行解析的資料編碼方式
Accept-Language:浏覽器所希望的語言種類
Authorication:授權資訊
Connection:表示是否需要持久連接配接。值為“keep-Alive”
Content-Length:表示請求消息正文的長度
Cookie:相關的http擴充頭
Cookie:用戶端将伺服器設定的Cookie傳回到伺服器
Set-Cookie:伺服器向用戶端設定Cookie
Cookie2:用戶端訓示伺服器支援Cookie的版本
set-Cookie2:伺服器向用戶端設定Cookie
本文轉自 宏強 51CTO部落格,原文連結:http://blog.51cto.com/tanhong/1913843