今天討論一下HTTP協議。一個作前端的,若是連HTTP協議都不瞭解,那實在是太不合格了。html
首先,什麼是HTTP?Hyper Text Transfer Protocol(超文本傳輸協議),用在瀏覽器和Web服務器之間傳輸超文本網頁。1991年,由IETF這個團體發佈了第一個版本——HTTP/0.9,但它有嚴重的設計缺陷,只支持「GET」方法,不支持MIME類型,很快的就被HTTP/1.0取代。而1996年發佈的這個HTTP/1.0也存活的並不長久,雖然是第一個正式發佈的穩定版本。1999年,HTTP/1.1誕生,直到如今一直通用(雖然有HTTP/2.0出現了,但還處於研究階段,並不完善)。前端
HTTP/1.1一頒佈,有趣了,它新增了三個舉足輕重的功能。瀏覽器
一、虛擬主機。之前網頁少,一臺服務器存一個站點也就無所謂了,可後來隨着互聯網的飛速發展,發現不行了,而虛擬主機可讓一個Web服務器中能夠並存多個站點。緩存
二、持久鏈接。一次請求完成後,和服務器不立刻斷開鏈接,保持一會再斷開。具體表如今Connection:keep-alive,後面會提到。服務器
三、代理鏈接。客戶端能夠經過代理服務器,間接訪問目標服務器。restful
1、請求方法
架構
開始正題,先來說講8個請求方法。app
GET:表示客戶端想得到服務器上的資源。(無請求主體)測試
POST:表示客戶端想傳遞數據給服務器。(有請求主體)編碼
PUT:表示客戶端想放置文件到服務器。(有請求主體)(在restful架構下使用)
DELETE:表示客戶端想刪除服務器上的指定文件。(無請求主體)(在restful架構下使用)
HEAD:表示客戶端想得到服務器上指定資源的響應頭部,不要詳細的內容。(無請求主體)
CONNECT:鏈接測試。(無請求主體)
TRACE:追蹤請求路徑。(無請求主體)
OPTIONS:決定能夠在服務器上執行哪些方法。(無請求主體)
2、請求消息
請求消息就是客戶端發給服務器的消息。分爲四部分,請求起始行、請求頭、CRLF、請求主體。
一、請求起始行(Start line)
首先是請求方法:就是上面說的8個。(後跟空格)
而後是請求URL:請求資源路徑。(後跟空格)
最後是協議
二、請求頭(Headers)
三、CRLF(回車換行)
四、請求主體(Body)
請求消息中,咱們着重來說講請求頭。它分爲4種類型:
請求消息專用頭(部分):
一、HOST:主機名(ex:XXX.com)
二、Accept:告訴服務器本身能夠響應的內容類型(ex:text/html)
三、Origin:告訴服務器當前請求來自哪一個域名(ex:http://127.0.0.1)
四、Referer:告訴服務器當前請求來自哪一個頁面(ex:http://127.0.0.1/index.html)
五、User-Agent:客戶端在告訴服務器本身的類型(ex:Chrome 5.0)
六、Accept-Encoding:瀏覽器在告訴服務器本身接收的響應數據編碼類型(ex:gzip<壓縮類型>)
七、Accept-Language:告訴服務器本身能夠接收的天然語言(ex:zh-CN<中文>)
請求(響應)消息通用頭(部分):
一、Cache-Control:告訴對方如何緩存消息(ex:no-cache/max-age=0)
二、Connnection:告訴對方啓用持久鏈接(ex:keep-alive)
三、Pragma:至關於Cache-Control,只不過是HTTP/1.0版本的(ex:no-cache)
四、Date:消息的建立時間(ex:Sun,11 Dec 2016 00:09:09 GMT)
請求主體描述頭(部分):
一、Content-Length:請求主體的長度
二、Content-Type:請求主體的內容類型
Content-Type的取值有三個:
(1)、text/plain 普通文本,未經編碼。
(2)、application/x-www-form-urlencoding 通過編碼後的數據。
(3)、multipart/form-data 包含上傳的文件數據。