本人學習HTTP相關知識的總結,力求以最簡單和高效的語言說明問題,讓你們快速掌握知識點。
本章家主要介紹HTTP協議的基礎,重點放在對cookie的講解。
本人能力有限,若有不正確之處請批評指正。css
HTTP全稱Hypertext Transfer Protocol,即超文本傳輸協議。
它是一種屬於應用層的通訊協議,容許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
HTTP字面意義上就是爲了HTML的傳輸而發明的網絡協議,但進過不斷的完善、改進和發展後,它已經再也不侷限於此,好比如今css、js、圖片也是經過這個協議傳輸的。所以HTTP已經成爲了Web領域一種通用的傳輸協議。json
HTTP協議的報文頭大致能夠分爲四類:通用報文頭、請求報文頭、響應報文頭和實體報文頭(描述報文體)。
在HTTP/1.1裏一共規範了47種報文頭字段。
各類報文定義參見:報文列表segmentfault
請求方法使用在請求行中,是客戶端告訴服務器該執行什麼樣的數據操做的標記,但也僅僅只是標記做用,並無嚴格意義上限制服務器的行爲。
可以嚴格遵循這套標準的服務,好比RESTful架構,有利於語義化並提供客戶端必定的自主性,但在非標準實現的服務器上,你甚至能夠用一個POST方法涵蓋GET、POST、PUT、DELETE操做。瀏覽器
等冪性:若是一個方法或功能執行一次或者屢次,結果是同樣的,那麼就說這個方法或功能是等冪的。
例如,設置某個用戶的性別爲男性,這個方法不管執行一次仍是屢次,它的結果都是相同的。因此,該方法具備冪等性。
例如,某個帳戶充值100元,這個方法執行一次和執行屢次的結果是不相同的。因此,該方法不具備冪等性。
用以表示網頁服務器超文本傳輸協議響應狀態的3位數字代碼。按首字母可分爲如下五大類:安全
完整列表請參考:狀態碼列表服務器
前面講到HTTP協議的特色時,提到其「無狀態」的特性,但實際使用中須要登陸狀態的場景是十分廣泛的,爲了解決這個問題就有了cookie機制。
cookie其實是服務器保存在客戶端上的一小段的文本信息。以鍵值對的形式保存,並由客戶端維護其有效期。服務器經過響應報文頭set-cookie進行設置。當客戶端再次請求該源時,會在請求報文頭裏將有效的cookie提交給服務器。
cookie遵循同源策略。cookie這種保存並自動回傳必定數據的特性,使基於無狀態的HTTP協議記錄穩定的狀態信息成爲了可能。cookie
不知道同源策略是啥能夠看個人另外一篇文章的第一部分:傳送門。網絡
set-cookie是響應報文頭,形如:session
set-cookie: <key>=<value>; Expires=<date>; Secure; HttpOnly
key爲屬性名,value爲值,一個set-cookie設置一個key,如需設置多個key,只須要同時返回多個set-cookie,例子中Expires、Secure、HttpOnly爲可選值。全部可選屬性以下:架構
屬性名 | 說明文字 |
---|---|
Expires | 超時時間點,默認是session,即關閉瀏覽器失效。 |
Max-Age | 失效前的秒數。優先級高於expires。 |
Domain | 可使用這個cookie的域,二級域名可指定爲一級,一級只能指定爲一級。 |
Path | 可使用這個cookie的路徑。 |
Secure | 限制該cookie只經過https傳遞。 |
HttpOnly | 限制該cookie只由服務器讀寫,不能被js獲取到。 |
cookie是請求報文頭,形如:
cookie: <key>=<value>; <key>=<value>...
key爲屬性名,value爲值,會一次返回該源下的全部有效key,以分號爲分割。這個結果與在瀏覽器執行document.cookie獲取到的值相同。
session是服務器記錄客戶狀態的機制。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。客戶端再次訪問時只須要從該session中查找該用戶的狀態。
通常session與cookie配合使用,構成會話跟蹤技術,即session-cookie機制。
session-cookie機制過程以下:
服務器生成session的id(即sessionid)後,就將它經過set-cookie傳遞到客戶端,客戶端保存這個sessionid,下次請求經過cookie回傳到服務器,服務器便可經過sessionid查詢到用戶的session,進而得到用戶狀態。
示意圖: