HTTP 方法
HTTP1.0 定義了三種請求方法:GET,POST 和 HEAD 方法
HTTP1.1 新增了六種請求方法:OPTIONS,PUT,PATCH,DELETE,TRACE 和 CONNECT
這些方法的具體作用是什麼?
方法 | 描述 |
---|---|
GET |
通常用於請求服務器發送某些資源 |
POST |
發送數據給服務器 |
HEAD |
請求資源的頭部信息,並且這些頭部與 HTTP GET 方法請求時返回的一致 該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載,以此可以節約帶寬資源 或者是欲判斷某一資源是否存在,使用 HEAD 要比 GET 要更好一些 |
OPTIONS |
當發起跨域請求時,瀏覽器常發送 OPTIONS 預請求,用於檢測服務器允許的 http 方法 若服務器接受該跨域請求,瀏覽器纔會繼續發送正式請求 |
PUT |
發送數據給服務器 |
PATCH |
用於對資源進行部分修改 |
DELETE | 用於刪除指定的資源 |
TRACE |
回顯服務器收到的請求,主要用於測試或診斷 |
CONNECT |
其作用就是將服務器作爲代理,讓服務器代替用戶去訪問其他頁面(說白了就是翻牆),然後將數據返回給用戶 |
冪等概念
定義:同一個請求方法執行多次和僅執行一次的效果完全相同,即爲冪等
GET 和 POST 有什麼區別?
區別 | 描述 |
---|---|
數據傳輸方式不同 |
GET 請求通過 URL 傳輸數據,而 POST 的數據通過請求體傳輸 |
安全性不同 |
POST 的數據因爲在請求主體內,所以有一定的安全性保證 而 GET 的數據在 URL 中,通過歷史記錄很容易查到數據信息 |
特性不同 |
GET 是安全(這裏的安全是指只讀特性,就是使用這個方法不會引起服務器狀態變化)且冪等 而 POST 是非安全非冪等 |
GET 無害 |
刷新、後退等瀏覽器操作 GET 請求是無害的,POST 可能重複提交表單 |
數據類型不同 |
GET 只允許 ASCII 字符,而 POST無限制 |
PUT 和 POST 都是給服務器發送新增資源,有什麼區別?
最主要的區別是:PUT 是冪等的,而 POST 非冪等
除此之外還有一個區別,通常情況下,PUT 的 URI 指向是具體單一資源,而 POST 可以指向資源集合
舉個例子,我們在開發一個博客系統,當我們要創建一篇文章的時候往往用
POST
https://www.jianshu.com/articles
,這個請求的語義是,在 articles 的資源集合下創建一篇新的文章,如果我們多次提交這個請求會創建多個文章,這是非冪等的而
PUT
https://www.jianshu.com/articles/123456
的語義是更新對應文章下的資源(比如修改作者名稱等),這個 URI 指向的就是單一資源,而且是冪等的,比如你把『劉德華』修改成『彭于晏』,提交多少次都是修改成『彭于晏』
PS:『POST表示創建資源,PUT表示更新資源』這種說法是錯誤的,兩個都能創建資源,根本區別就在於冪等性
PUT 和 PATCH 都是給服務器發送修改資源,有什麼區別?
區別一:PUT 是冪等的,PATCH 是非冪等的
區別二:PUT 和 PATCH 都是更新資源,而 PATCH 用來對已知資源進行局部更新
比如我們有一篇文章的地址 https://www.jianshu.com/articles/123456
,這篇文章的可以表示爲:
article = {
author: "lzw",
age: 18,
id: 007,
};
當我們要修改文章的作者的年齡時,我們可以直接發送 PUT 請求:https://www.jianshu.com/articles/123456
,這個時候的數據應該是:
article = {
author: "lzw",
age: 20,
id: 007,
};
如果你不想每次都帶有這麼多無用的信息,那麼可以發送 PATCH 請求:https://www.jianshu.com/articles/123456
,這個時候只需要:
article = {
age: 20,
};