HTTP協(xié)議

HTTP協(xié)議簡介

  • HyperText Transfer Protocol,超文本傳輸協(xié)議;
  • 基于 TCP 的應(yīng)用層協(xié)議;
  • 客戶端發(fā)起請求,服務(wù)器響應(yīng)請求。
  • 版本
  1. HTTP/ 0.9 ,最早于 1991 年發(fā)布,目前已不再用;
  2. HTTP/1.0, 1996 年發(fā)布,引入了多種功能,至今仍在使用當(dāng)中。
  3. HTTP/1.1,1997 年 發(fā)布,持久連接被默認(rèn)采用,目前最流行的版本。
  4. HTTP/2 ,2015 年 發(fā)布,引入了服務(wù)器推送等多種功能,目前最新的版本。

HTTP 請求

HTTP 請求由三部分組成:

請求行:包含請求方法、請求地址和 HTTP 協(xié)議版本
消息報頭:包含一系列的鍵值對
請求正文(可選):注意和消息報頭之間有一個空行

HTTP 請求

舉例: HTTP GET 請求

GET / HTTP/1.1
Host: httpbin.org
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
Cookie: _ga=GA1.2.475070272.1480418329; _gat=1

上面的第一行:請求行

GET 是請求方法,表示從服務(wù)器獲取資源;/ 是一個請求地址;HTTP/1.1 表明版本是 1.1。

請求行后面的一系列鍵值對就是消息報頭。

其中:
Host 是請求報頭域,用于指定被請求資源的 Internet 主機和端口號,它通常從 HTTP URL 中提取出來;
Connection 表示連接狀態(tài),keep-alive 表示該連接是持久連接(persistent connection),即 TCP 連接默認(rèn)不關(guān)閉,可以被多個請求復(fù)用,如果客戶端和服務(wù)器發(fā)現(xiàn)對方有一段時間沒有活動,就可以主動關(guān)閉連接;
Cache-Control 用于指定緩存指令,它的值有 no-cache, no-store, max-age 等,max-age=秒表示資源在本地緩存多少秒;
User-Agent 用于標(biāo)識請求者的一些信息,比如瀏覽器類型和版本,操作系統(tǒng)等;
Accept 用于指定客戶端希望接受哪些類型的信息,比如 text/html, image/gif 等;
Accept-Encoding 用于指定可接受的內(nèi)容編碼;
Accept-Language 用于指定可接受的自然語言;
Cookie 用于維護(hù)狀態(tài),可做用戶認(rèn)證,服務(wù)器檢驗等,它是瀏覽器儲存在用戶電腦上的文本片段;

HTTP 請求方法

HTTP 通過不同的請求方法以多種方式來操作指定的資源,常用的請求方法如下表:

方法 描述
GET 從服務(wù)器獲取指定(請求地址)的資源的信息,它通常只用于讀取數(shù)據(jù),就像數(shù)據(jù)庫查詢一樣,不會對資源進(jìn)行修改。
POST 向指定資源提交數(shù)據(jù)(比如提交表單,上傳文件),請求服務(wù)器進(jìn)行處理。數(shù)據(jù)被包含在請求正文中,這個請求可能會創(chuàng)建新的資源或更新現(xiàn)有的資源。
PUT 通過指定資源的唯一標(biāo)識(在服務(wù)器上的具體存放位置),請求服務(wù)器創(chuàng)建或更新資源。
DELETE 請求服務(wù)器刪除指定資源。
HEAD 與 GET 方法類似,從服務(wù)器獲取資源信息,和 GET 方法不同的是,HEAD 不含有呈現(xiàn)數(shù)據(jù),僅僅是 HTTP 頭信息。HEAD 的好處在于,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲得資源的元信息(或元數(shù)據(jù))。
OPTIONS 該方法可使服務(wù)器傳回資源所支持的所有 HTTP 請求方法。

HTTP 響應(yīng)

HTTP 響應(yīng)與 HTTP 請求相似,由三部分組成:
  • 狀態(tài)行:包含 HTTP 協(xié)議版本、狀態(tài)碼和狀態(tài)描述,以空格分隔
  • 響應(yīng)頭:即消息報頭,包含一系列的鍵值對
  • 響應(yīng)正文:返回內(nèi)容,注意和響應(yīng)頭之間有一個空行
image.png

下面是一個 HTTP GET 請求的響應(yīng)結(jié)果:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 29 Nov 2016 13:08:38 GMT
Content-Type: application/json
Content-Length: 203
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

{
  "args": {}, 
  "headers": {
    "Host": "httpbin.org", 
    "User-Agent": "Paw/2.3.1 (Macintosh; OS X/10.11.3) GCDHTTPRequest"
  }, 
  "origin": "13.75.42.240", 
  "url": "https://httpbin.org/get"
}

上面的第一行就是一個狀態(tài)行:

其中,200 是狀態(tài)碼,表示客戶端請求成功,OK 是相應(yīng)的狀態(tài)描述。
狀態(tài)碼是一個三位的數(shù)字,常見的狀態(tài)碼有以下幾類:

1XX 消息 -- 請求已被服務(wù)接收,繼續(xù)處理
2XX 成功 -- 請求已成功被服務(wù)器接收、理解、并接受
200 OK
201 Created 已創(chuàng)建
202 Accepted 接收
203 Non-Authoritative Information 非認(rèn)證信息
204 No Content 無內(nèi)容
3XX 重定向 -- 需要后續(xù)操作才能完成這一請求
301 Moved Permanently 請求永久重定向
302 Moved Temporarily 請求臨時重定向
304 Not Modified 文件未修改,可以直接使用緩存的文件
305 Use Proxy 使用代理
4XX 請求錯誤 -- 請求含有詞法錯誤或者無法被執(zhí)行
400 Bad Request 由于客戶端請求有語法錯誤,不能被服務(wù)器所理解
401 Unauthorized 請求未經(jīng)授權(quán)。這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden 服務(wù)器收到請求,但是拒絕提供服務(wù)。服務(wù)器通常會在響應(yīng)正文中給出不提供服務(wù)的原因
404 Not Found 請求的資源不存在,例如,輸入了錯誤的URL
5XX 服務(wù)器錯誤 -- 服務(wù)器在處理某個正確請求時發(fā)生錯誤
500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期的錯誤,導(dǎo)致無法完成客戶端的請求
503 Service Unavailable 服務(wù)器當(dāng)前不能夠處理客戶端的請求,在一段時間之后,服務(wù)器可能會恢復(fù)正常
504 Gateway Time-out 網(wǎng)關(guān)超時

狀態(tài)行后面的一系列鍵值對就是消息報頭,即響應(yīng)頭:
其中:

Server 包含了服務(wù)器用來處理請求的軟件信息,跟請求報頭域 User-Agent 相對應(yīng);
Content-Type 用于指定發(fā)送給接收者(比如瀏覽器)的響應(yīng)正文的媒體類型,比如 text/html, text/css, image/png, image/jpeg, video/mp4, application/pdf, application/json 等;
Content-Length 指明本次回應(yīng)的數(shù)據(jù)長度;

GET 和 POST

表單提交的兩種方式(method)get和post。


說明:

  • get方式提交表單,參數(shù)會出現(xiàn)在URL中,而post不會
  • 瀏覽器對URL長度有限制,get提交數(shù)據(jù)時URL長度不能太長(2kB),而post提交理論上沒有限制,攜帶的數(shù)據(jù)量比get多
  • get提交是以明文方式直接出現(xiàn)在URL中,不適合機密數(shù)據(jù)傳遞(如密碼),post則更安全。
  • get請求有利于保存URL,可以再次訪問及傳播,post則不具有。

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,750評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,353評論 3 82
  • 引言 HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年...
    _燴面_閱讀 1,386評論 0 9
  • 放一波《金剛狼3》 壁紙
    pangdaaa閱讀 2,072評論 0 0
  • “美女姐姐,想要買點什么?” “我想試下小羊皮315的顏色?!?“315是姨媽紅色,比較強勢哎?美女姐姐怎么會喜歡...
    叭噠閱讀 770評論 10 4

友情鏈接更多精彩內(nèi)容