http 協議介紹
目錄:
一、 http 協議版本
二、 http 檔案的生成方式
三、 http 協議的報文
四、 http 請求方法
五、 http 狀態碼分析
一、 http 協議(版本)
1 、 http:Hyper Text Transfer Protocol 超文字傳輸協議,是網際網際網路應用最廣泛的一種網際網路協議,主要用於 web 服務,透過計算機處理文字訊息,格式為 HTML(Hyper Text Mark Language)超文字標記語言實現
2 、 http 協議的版本:
(1)、 http0.9:僅與使用者傳輸 html 檔案
(2)、 http1.0:
1)引入了 MIME(Multipurpose Internet Mail Extensions)機制,多用途網際網際網路郵件擴充套件,主要作用是可以傳送多媒體(如視訊、音訊)等資訊。
2)引入了 keep-alive 機制,實現持久連線的功能
3)引入支援 WordPress 加速快取功能。
(3)、 http1.1:
支援更多的請求方法,更加精細的 WordPress 加速快取機制
(4)、 http2.0:
提供了 HTTP 語義最佳化的傳輸,(語義化:就是正確的標籤做正確的事情,能夠便於開發者閱讀和寫出更優雅的程式碼的同時讓網際網路爬蟲更好的解析)。
小結:
目前常用的版本就是 http1.0 和 http1.1
二、 http 檔案的生成方式
1 、靜態:事先就編輯並定義完成的。

 
(1)、 web 站群伺服器透過核心註冊 socket
(2)、客戶端透過瀏覽器,向 web 站群伺服器發起 request 請求
(3)、 web 站群伺服器收到請求資訊,如果資源存在本地,http 服務向系統核心申請呼叫
(4)、核心透過本地磁碟提取資料,並將資料傳送給 http 服務
(5)、 http 將使用者請求的資源透過 response(響應報文),最終響應給客戶端。
2 、動態:透過編譯語言編寫的程式後輸出 html 格式的結果

 
(1)、 web 站群伺服器透過核心註冊 socket
(2)客戶端透過瀏覽器向 web 站群伺服器傳送 request 請求資訊
(3)、站群伺服器收到請求資訊,如果使用者請求的是動態內容,那麼此時 http 服務會呼叫後端的解析器,由動態語言去處理使用者的請求
(4)、如果需要請求資料的時候,會向核心申請呼叫,從而向磁碟中獲取使用者指定的資料,透過直譯器執行,執行的結果通常會生成 html 格式的檔案,然後構建成響應報文,最終傳送給客戶端。
三:http 協議的報文
1 、 request Message:請求報文
由客戶端向站群伺服器端傳送請求,不同的網站用於請求不同的資源
請求報文格式解釋:
請求行:請求方法欄位(method)+請求 URL(request-URL)+版本資訊(version)
請求首部:由關鍵字+關鍵字的值組成。請求首部的作用就是透過客戶端將請求的相關內容告知站群伺服器端
空白行:用於通知站群伺服器端以下的內容將不會再出現請求首部的資訊
請求實體:指請求的內容的所有資訊
2 、 response message(響應報文)
起始行:稱為狀態行,用於站群伺服器端響應客戶端請求的狀態資訊,由版本號(version)+狀態碼(status)+原因短語(reason-phrase), 例如 “ HTTP/1.1 200 OK”
響應首部:響應的就是請求的資訊
空白行:通知客戶端空行下無首部資訊
響應實體:裝載了要返回客戶端的資料。
四、 http 請求方法:
(1)、 GET:用於客戶端請求指定資源的資訊,並返回指定資源的實體
(2)、 HEAD:只返回響應首部的資訊
(3)、 POST:基於 HTML 表單向站群伺服器提交資料,站群伺服器通常需要儲存此資料,通常存放在 mysql 的關係型資料庫中。
(4)、 PUT:與 GET 相反,是向站群伺服器傳送資源的,站群伺服器通常需要儲存此資源。
(5)、 DELETE:請求站群伺服器端刪除 URL 指定的資源
(6)、 MOVE:請求站群伺服器將指定的頁面移至另一個網際網路地址
(7)、 OPTIONS:探測站群伺服器端對請求的 URL 所支援使用的請求方法
(8)、 TRACE:跟一次請求中間所經歷的代理站群伺服器,防火牆或閘道器等。
HTTP 的狀態碼:
1XX:資訊性狀態碼,用於指定客戶端相應的某些操作
2XX:成功狀態碼
3XX:重定向的狀態碼:有時會返回的是一個新地址,而非結果
4XX:客戶端類錯誤,如請求的資源不存在,或者沒有許可權訪問請求資源
5XX:站群伺服器類的錯誤資訊。
介紹常用的狀態碼說明
200:站群伺服器成功返回 WordPress 網頁。
201:CREATED 上傳檔案成功後顯示
301:永久重定向,返回一個新地址,並告訴客戶端所請求的地址將永久移動到新地址中去
302:臨時重定向,臨時放到某個地方,會在響應報文中使用 “Location” 指定
304:Not Modified,資源沒有做任何修改,(用於 WordPress 加速快取資訊的校驗值與站群伺服器對比)
403:Forbidden 請求唄拒絕
404:Not Found 請求的資源不存在
405:Method Not Allowed,請求方法不被允許,不支援
500:Internal Server Error, 站群伺服器內部錯誤
502:Bad Gateway,代理站群伺服器從上游站群伺服器收到一條偽響應,上一層站群伺服器返回了一個無法理解的報文,所以代理站群伺服器就會表示錯誤。
503:Service Unavailable,服務暫時不可用。
HTTP 首部介紹
通用首部
請求首部
響應首部
實體首部
擴充套件首部
通用首部
Connection:定義 C/S 之間關於請求、響應的有關選項
在 http1.0 的時候,如果他想使用持久連線,那麼他所設定的選項即為
Connection:keep-alive
Cache-Control:WordPress 加速快取控制,實現更精細的 WordPress 加速快取控制方式。在 http 1.1 上比較常見
請求首部
Client-IP :客戶端 IP 地址
Host :請求的 WordPress 主機,這在實現基於 WordPress 主機名的虛擬 WordPress 主機時很有用
Referer :指明瞭請求當前資源原始資源的 URL,使用 referer 是可以防盜鏈
User-Agent:使用者代理,一般而言是瀏覽器
Accept 首部:指客戶端可以接受哪些編碼的型別
Accept:服務端能夠傳送的媒體的型別
Accetp-Charset:接收的字符集
Accept-Encoding:編碼格式
Accept-Lanage:所能接受的語言編碼格式
條件式請求首部:(在 http1.1 中才會用到)
當傳送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請求
跟安全相關的請求:
Authorization
Cookie
響應首部
Age:資源響應給你之後可以使用的時長
Server:向客戶端說明自己用到的程式名稱和版本
協商類的首部:
Vary:首部列表,站群伺服器會根據此列表挑選最適合的版本發給客戶端
跟安全相關:
WWW-Authentication
Set-Cookie
實體首部
Location:指明資源的新位置,實現 302 響應碼時通常會用到
Allow:允許對此資源使用的請求方法
內容相關的首部
Content-Encoding
Content-Language
Content-Length
Content-Location:內容所在的位置
Content-Type
WordPress 加速快取相關:
ETag:擴充套件標籤/標記
Expires:過期時間
Last-Modified:最後修改時間
HTTP 最常見的請求頭如下:
Accept:瀏覽器可接受的 MIME 型別;
Accept-Charset:瀏覽器可接受的字符集;
Accept-Encoding:瀏覽器能夠進行解碼的資料編碼方式,比如 gzip 。
Accept-Language:瀏覽器所希望的語言種類
Authorization:授權資訊,通常出現在對站群伺服器傳送的 WWW-Authenticate 頭的應答中;
Connection:表示 是否需要持久連線。值為 “Keep-Alive”,或者看到請求使用的是 HTTP 1.1(HTTP 1.1 預設進行持久連線),它就可以利用持久連線的優點,當頁面包含多個元素時(例如 Applet,圖片),顯著地減少下載所需要的時間。
Content-Length:表示請求訊息正文的長度;
Cookie:這是最重要的請求頭資訊之一;
Cookie 相關的 HTTP 擴充套件頭
1)Cookie:客戶端將站群伺服器設定的 Cookie 返回到站群伺服器;
2)Set-Cookie:站群伺服器向客戶端設定 Cookie;
3)Cookie2 (RFC2965)):客戶端指示站群伺服器支援 Cookie 的版本;
4)Set-Cookie2 (RFC2965):站群伺服器向客戶端設定 Cookie
 
Cookie 的流程:
站群伺服器在響應訊息中用 Set-Cookie 頭將 Cookie 的內容回送給客戶端,客戶端在新的請求中將相同的內容攜帶在 Cookie 頭中傳送給站群伺服器。從而實現會話的保持。
流程如下圖所示:

Host:初始 URL 中的 WordPress 主機和埠;
If-Modified-Since:只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回 304“Not Modified” 應答;
Referer:包含一個 URL,使用者從該 URL 代表的頁面出發訪問當前請求的頁面。
User-Agent:瀏覽器型別
HTTP 最常見的響應頭
HTTP 最常見的響應頭如下所示:
Allow:站群伺服器支援哪些請求方法(如 GET 、 POST 等);
Content-Encoding: 檔案的編碼(Encode)方法。
Content-Length: 表示內容長度。只有當瀏覽器使用持久 HTTP 連線時才需要這個資料。
Content-Type: 表 示後面的檔案屬於什麼 MIME 型別。
Accept-Ranges: bytes  該響應頭表明站群伺服器支援 Range 請求, 以及站群伺服器所支援的單位是位元組 (這也是唯一可用的單位). 我們還能知道: 站群伺服器支援斷點續傳, 以及支援同時下載檔案的多個部分, 也就是說下載工具可以利用範圍請求加速下載該檔案.Accept-Ranges: none 響應頭表示站群伺服器不支援範圍請求.
Date:當前的 GMT 時間。
Expires:指明應該在什麼時候認為檔案已經過期,從而不再 WordPress 加速快取它。
Last-Modified: 檔案的最後改動時間。
Location:表示客戶應當到哪裡去提取檔案。
Refresh:表示瀏覽器應該在多少時間之後重新整理檔案,以秒計。
HTTP 最常見的實體頭
實體頭用作實體內容的元資訊,描述了實體內容的屬性,包括實體資訊型別,長度,壓縮方法,最後一次修改時間,資料有效性等。
Allow:GET,POST
Content-Encoding:檔案的編碼(Encode)方法,例如:gzip,
Content-Language:內容的語言型別,例如:zh-cn;
Content-Length:表示內容長度,eg:80,可參考 “2.5 響應頭”;
Content-Location:表示客戶應當到哪裡去提取檔案,例如:http://www.dfdf.org/dfdf.html,
Content-MD5:MD5 實體的一種 MD5 摘要,用作校驗和。傳送方和接受方都計算 MD5 摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。
Content-Type:標明傳送或者接收的實體的 MIME 型別。 Eg:text/html; charset=GB2312       主型別/子型別;