HTTP

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。

  1. 用途
    • 會話狀態管理(用戶登錄狀態、購物車等其他需要記錄的信息)
    • 個性化設置(自定義設置、主題等)
    • 瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)
  2. 創建過程
    • 服務器發送的響應報文包含set-cookie首部字段,客戶端得到響應報文後把cookie內容保存到瀏覽器中
    • 客戶端之後對同一個服務器發送請求時,會在瀏覽器中取出Cookie信息並通過Cookie請求首部字段發送到服務器
  3. 分類
    • 會話期Cookie,瀏覽器關閉之後自動刪除
    • 持久性Cookie,指定過期時間(Expires)或有效期時間(max-age)後,就成爲了持久性Cookie
  4. Session

除了可以將用戶信息通過 Cookie 存儲在用戶瀏覽器中,也可以利用 Session 存儲在服務器端,存儲在服務器端的信
息更加安全。

Session 可以存儲在服務器上的文件、數據庫或者內存中。也可以將 Session 存儲在 Redis 這種內存型數據庫中,效率會更高。

  1. 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首部字段沒有指定不進行緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章