HTTP方法
- GET,獲取資源
- HEAD,獲取報文首部,主要用於確認URL的有效性,資源更新的時間等
- POST,傳輸數據
- PUT,上傳文件,一般不用
- PATCH,對資源進行部分修改,PUT也允許修改資源,但是隻能完全替代原資源,PATCH可以部分修改
- DELETE,刪除文件
- OPTIONS,查詢支持的方法
- CONNECT,要求在與代理服務器通信時建立隧道
- TRACE,追蹤路徑
HTTP狀態碼
- 100 Continue:表明到目前爲止都很正常,客戶端可以繼續發送請求或者忽略這個響應
- 200 OK
- 301 Moved Permanently :永久性重定向
- 302 Found:臨時性重定向
- 400 Bad Request:請求報文中存在語法錯誤。
- 401 Unauthorized:該狀態碼錶示發送的請求需要有認證信息(BASIC 認證、DIGEST 認證)。如果之前已進
行過一次請求,則表示用戶認證失敗。 - 403 Forbidden :請求被拒絕。
- 404 Not Found
- 500 Internal Server Error:服務器正在執行請求時發生錯誤。
- 503 Service Unavailable:服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。
連接管理
- 短連接:每進行一次HTTP通信就要建立一次TCP連接
- 長連接:建立一次TCP連接,進行多次HTTP通信
Cookie
HTTP協議是無狀態的,主要是爲了讓HTTP儘可能簡單,使得它可以處理大量事務
Cookie是服務器發送到用戶瀏覽器並保存在客戶端的一小塊數據,再次向通一服務器發送請求時被攜帶,用於告知服務端兩個請求來自同一個瀏覽器。由於之後每次請求都會需要攜帶 Cookie 數據,因此會帶來
額外的性能開銷(尤其是在移動環境下)。
Cookie 曾一度用於客戶端數據的存儲,因爲當時並沒有其它合適的存儲辦法而作爲唯一的存儲手段,但現在隨着現
代瀏覽器開始支持各種各樣的存儲方式,Cookie 漸漸被淘汰。新的瀏覽器 API 已經允許開發者直接將數據存儲到本
地,如使用 Web storage API(本地存儲和會話存儲)或 IndexedDB。
- 用途
- 會話狀態管理(用戶登錄狀態、購物車等其他需要記錄的信息)
- 個性化設置(自定義設置、主題等)
- 瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)
- 創建過程
- 服務器發送的響應報文包含set-cookie首部字段,客戶端得到響應報文後把cookie內容保存到瀏覽器中
- 客戶端之後對同一個服務器發送請求時,會在瀏覽器中取出Cookie信息並通過Cookie請求首部字段發送到服務器
- 分類
- 會話期Cookie,瀏覽器關閉之後自動刪除
- 持久性Cookie,指定過期時間(Expires)或有效期時間(max-age)後,就成爲了持久性Cookie
- Session
除了可以將用戶信息通過 Cookie 存儲在用戶瀏覽器中,也可以利用 Session 存儲在服務器端,存儲在服務器端的信
息更加安全。
Session 可以存儲在服務器上的文件、數據庫或者內存中。也可以將 Session 存儲在 Redis 這種內存型數據庫中,效率會更高。
- Cookie 與 Session 選擇
- Cookie 只能存儲 ASCII 碼字符串,而 Session 則可以存儲任何類型的數據,因此在考慮數據複雜性時首選Session;
- Cookie 存儲在瀏覽器中,容易被惡意查看。如果非要將一些隱私數據存在 Cookie 中,可以將 Cookie 值進行加密,然後在服務器進行解密;
- 對於大型網站,如果用戶所有的信息都存儲在 Session 中,那麼開銷是非常大的,因此不建議將所有的用戶信息都存儲到 Session 中。
HTTPS
HTTP 有以下安全性問題:
- 使用明文進行通信,內容可能會被竊聽;
- 不驗證通信方的身份,通信方的身份有可能遭遇僞裝;
- 無法證明報文的完整性,報文有可能遭篡改。
HTTPS 並不是新協議,而是讓 HTTP 先和SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是說HTTPS使用了隧道進行通信。
GET 和 POST 比較
作用
GET 用於獲取資源,而 POST 用於傳輸實體主體。
參數
GET 和 POST 的請求都能使用額外的參數,但是 GET 的參數是以查詢字符串出現在 URL 中,而 POST 的參數存儲在實體主體中。
因爲 URL 只支持 ASCII 碼,因此 GET 的參數中如果存在中文等字符就需要先進行編碼。
POST 參數支持標準字符集。
安全
安全的 HTTP 方法不會改變服務器狀態,也就是說它只是可讀的。
GET 方法是安全的,而 POST 卻不是,因爲 POST 的目的是傳送實體主體內容,這個內容可能是用戶上傳的表單數據,上傳成功之後,服務器可能把這個數據存儲到數據庫中,因此狀態也就發生了改變。
安全的方法除了 GET 之外還有:HEAD、OPTIONS。
不安全的方法除了 POST 之外還有 PUT、DELETE。
冪等性
冪等的 HTTP 方法,同樣的請求被執行一次與連續執行多次的效果是一樣的,服務器的狀態也是一樣的。冪等方法不應該具有副作用
所有的安全方法也都是冪等的。
在正確實現的條件下,GET,HEAD,PUT 和 DELETE 等方法都是冪等的,而 POST 方法不是。
可緩存
請求報文的 HTTP 方法本身是可緩存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可緩存,POST 在多數情況下不可緩存的。
響應報文的狀態碼是可緩存的
響應報文的 Cache-Control首部字段沒有指定不進行緩存。