詳解HTTP4種方法(GET、POST、 PUT和DELETE)
一、GET 和 POST
1. GET方法
特點(diǎn):
- 用途:用于從服務(wù)器獲取數(shù)據(jù)。
- 參數(shù)傳遞方式:參數(shù)會(huì)附加在URL后面,以
key=value
的形式,通過查詢字符串傳遞,例如:
http://example.com/page?name=John&age=30
- 可見性:參數(shù)是明文的,用戶可以直接在瀏覽器地址欄看到傳遞的參數(shù)。
- 限制:由于URL長度限制(具體限制因?yàn)g覽器和服務(wù)器而異,但一般為2000字符左右),傳輸?shù)臄?shù)據(jù)量較小。
- 冪等性:GET請求是冪等的,重復(fù)發(fā)送相同的GET請求不會(huì)改變服務(wù)器的狀態(tài)。
- 緩存:GET請求的數(shù)據(jù)可以被瀏覽器緩存,也可以被保存在瀏覽器歷史中。
優(yōu)點(diǎn):
- 簡單直觀,適合獲取數(shù)據(jù)。
- 可以通過書簽保存,便于分享。
缺點(diǎn):
- 參數(shù)暴露在URL中,敏感數(shù)據(jù)(如密碼)不安全。
- 數(shù)據(jù)量有限,無法上傳較大的數(shù)據(jù)。
2. POST方法
特點(diǎn):
- 用途:用于向服務(wù)器提交數(shù)據(jù),例如表單提交或上傳文件。
- 參數(shù)傳遞方式:參數(shù)包含在請求體(Body)中,通常是隱式的。例如:
POST /form HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 name=John&age=30
- 可見性:參數(shù)不顯示在URL中,用戶看不到具體傳輸?shù)膬?nèi)容。
- 限制:幾乎沒有數(shù)據(jù)大小限制,可以傳輸大文件。
- 冪等性:POST請求不是冪等的,每次請求都會(huì)對服務(wù)器資源產(chǎn)生不同的影響(如新增數(shù)據(jù))。
- 緩存:POST請求默認(rèn)不會(huì)被瀏覽器緩存。
優(yōu)點(diǎn):
- 安全性比GET稍高(參數(shù)不直接暴露在URL中,但仍需結(jié)合HTTPS來保護(hù)數(shù)據(jù))。
- 支持傳輸大量數(shù)據(jù),適合復(fù)雜的數(shù)據(jù)提交。
缺點(diǎn):
- 不如GET直觀,無法通過URL直接分享。
- 相比GET,性能可能稍低(需要更多的資源來處理請求體)。
3. 總結(jié)對比
屬性 | GET | POST |
---|---|---|
用途 | 獲取數(shù)據(jù) | 提交數(shù)據(jù) |
參數(shù)傳遞 | URL查詢字符串 | 請求體(Body) |
安全性 | 參數(shù)明文暴露,不適合敏感數(shù)據(jù) | 參數(shù)隱藏,但需要HTTPS保護(hù) |
數(shù)據(jù)大小 | 受URL長度限制 | 無明顯限制 |
冪等性 | 冪等 | 非冪等 |
緩存 | 可緩存 | 不可緩存 |
可見性 | 參數(shù)可見 | 參數(shù)不可見 |
選擇方法:
- GET:適合只獲取數(shù)據(jù)、無副作用的場景,如加載網(wǎng)頁內(nèi)容。
- POST:適合提交表單數(shù)據(jù)、上傳文件或其他需要修改服務(wù)器數(shù)據(jù)的場景。
二、PUT 和 DELETE
PUT 和 DELETE 是HTTP協(xié)議中的兩種方法,主要用于對資源執(zhí)行修改和刪除操作。它們和 GET、POST 一樣,都是定義在HTTP/1.1中的基本方法,常用于RESTful API中。
1. PUT 方法
特點(diǎn)
用途:用于創(chuàng)建或更新資源。
- 如果指定的資源不存在,則創(chuàng)建新資源。
- 如果指定的資源已存在,則更新該資源。
冪等性:PUT 是冪等的,重復(fù)發(fā)送相同的 PUT 請求,對服務(wù)器的狀態(tài)不會(huì)產(chǎn)生額外影響(相同數(shù)據(jù)會(huì)覆蓋現(xiàn)有資源)。
請求體:PUT 請求體中包含需要?jiǎng)?chuàng)建或更新的數(shù)據(jù)。
示例
場景:創(chuàng)建或更新用戶信息。
請求:
PUT /users/123 HTTP/1.1 Host: example.com Content-Type: application/json Content-Length: 47 { "username": "johndoe", "email": "john@example.com" }
- 目標(biāo)資源:
/users/123
(用戶ID為123的資源)。 - 請求體:包含用戶數(shù)據(jù)。
響應(yīng):
- 成功創(chuàng)建資源:
201 Created
- 成功更新資源:
200 OK
2. DELETE 方法
特點(diǎn)
- 用途:用于刪除服務(wù)器上的指定資源。
- 冪等性:DELETE 也是冪等的。對同一資源發(fā)送多次 DELETE 請求,結(jié)果是一樣的:資源被刪除(或已經(jīng)不存在)。
- 請求體:通常不需要請求體,資源信息由 URL 指定。
示例
場景:刪除用戶信息。
請求:
DELETE /users/123 HTTP/1.1 Host: example.com
- 目標(biāo)資源:
/users/123
(用戶ID為123的資源)。
響應(yīng):
- 刪除成功:
200 OK
或204 No Content
- 資源不存在:
404 Not Found
3. PUT 和 DELETE 的區(qū)別
屬性 | PUT | DELETE |
---|---|---|
用途 | 創(chuàng)建或更新資源 | 刪除資源 |
冪等性 | 冪等 | 冪等 |
請求體 | 包含資源數(shù)據(jù),用于創(chuàng)建或更新 | 通常不需要請求體 |
響應(yīng)狀態(tài)碼 | 200 OK (更新成功),201 Created (創(chuàng)建成功) | 200 OK ,204 No Content ,或 404 Not Found |
對服務(wù)器的影響 | 寫操作(新增或覆蓋資源) | 刪除操作 |
4. PUT 和 POST 的對比
- PUT 是冪等的,通常指定資源的完整路徑(如
/users/123
),強(qiáng)調(diào)資源替換。 - POST 不是冪等的,通常操作資源集合(如
/users
),強(qiáng)調(diào)資源新增。
5. RESTful API 實(shí)踐建議
- PUT:用來對已有資源進(jìn)行修改,或在知道資源路徑的情況下創(chuàng)建資源。
- DELETE:用來刪除指定資源,保證資源唯一性。
- POST:用來新增資源,尤其在路徑未知或創(chuàng)建規(guī)則復(fù)雜時(shí)。
三、總結(jié)
1. GET (讀取數(shù)據(jù))
- 作用:從服務(wù)器獲取數(shù)據(jù)
- 參數(shù)位置:通過 URL 的查詢字符串傳遞參數(shù)。
- 請求體:無請求體。
- 冪等性:冪等,多次請求結(jié)果相同。
- 適用場景:加載網(wǎng)頁內(nèi)容、獲取用戶信息等。
- 示例:
GET /users/123 HTTP/1.1
2. POST (創(chuàng)建數(shù)據(jù))
作用:向服務(wù)器提交數(shù)據(jù),通常用于創(chuàng)建新資源
參數(shù)位置:數(shù)據(jù)在請求體中傳遞。
請求體:有請求體(如表單數(shù)據(jù)或 JSON)。
冪等性:非冪等,每次請求可能創(chuàng)建新的資源。
適用場景:提交表單、新增用戶、上傳文件等。
示例:
POST /users HTTP/1.1 Content-Type: application/json { "username": "johndoe", "email": "john@example.com" }
3. PUT (創(chuàng)建或更新數(shù)據(jù))
作用:創(chuàng)建或更新指定的資源
參數(shù)位置:數(shù)據(jù)在請求體中傳遞。
請求體:有請求體(包含完整的資源數(shù)據(jù))。
冪等性:冪等,多次請求結(jié)果一致。
適用場景:更新用戶信息、替換文件等。
示例 :
PUT /users/123 HTTP/1.1 Content-Type: application/json { "username": "newname", "email": "new@example.com" }
4. DELETE (刪除數(shù)據(jù))
作用:從服務(wù)器刪除指定的資源
參數(shù)位置:資源通過 URL 指定。
請求體:通常無請求體。
冪等性:冪等,多次請求結(jié)果相同(資源被刪除)。
適用場景:刪除用戶、刪除文件等。
示例:
DELETE /users/123 HTTP/1.1
總結(jié)對比表
方法 | 作用 | 請求體 | 冪等性 | 適用場景 |
---|---|---|---|---|
GET | 查詢數(shù)據(jù) | 無 | 是 | 獲取數(shù)據(jù),例如用戶信息。 |
POST | 創(chuàng)建資源 | 有 | 否 | 創(chuàng)建新資源,例如新增用戶。 |
PUT | 更新(或創(chuàng)建)資源 | 有(完整資源數(shù)據(jù)) | 是 | 更新或替換資源,例如修改用戶。 |
DELETE | 刪除資源 | 無(一般) | 是 | 刪除指定資源,例如刪除用戶。 |
簡單來說:
- GET = 查。
- POST = 增。
- PUT = 改(或覆蓋)。
- DELETE = 刪。
四、HTTP狀態(tài)碼合集
狀態(tài)碼 | 編碼 | 描述 |
---|---|---|
1xx 信息性響應(yīng) | ||
100 | Continue | 繼續(xù),客戶端應(yīng)繼續(xù)其請求 |
101 | Switching Protocols | 服務(wù)器正在切換協(xié)議 |
102 | Processing | 服務(wù)器已收到請求,但尚未處理完成(WebDAV) |
103 | Early Hints | 預(yù)加載資源的早期提示 |
2xx 成功響應(yīng) | ||
200 | OK | 請求成功 |
201 | Created | 請求成功并創(chuàng)建了資源 |
202 | Accepted | 請求已接受,但尚未處理完成 |
203 | Non-Authoritative Information | 請求成功,但返回的內(nèi)容可能來自第三方 |
204 | No Content | 請求成功,但沒有返回內(nèi)容 |
205 | Reset Content | 請求成功,客戶端應(yīng)重置文檔視圖 |
206 | Partial Content | 服務(wù)器成功處理了部分請求(斷點(diǎn)續(xù)傳) |
207 | Multi-Status | 返回多個(gè)狀態(tài)碼(WebDAV) |
208 | Already Reported | 資源已被報(bào)告(WebDAV) |
226 | IM Used | 服務(wù)器已完成 GET 請求,并使用了實(shí)例操作 |
3xx 重定向 | ||
300 | Multiple Choices | 請求有多個(gè)可能的響應(yīng) |
301 | Moved Permanently | 資源已永久移動(dòng) |
302 | Found | 資源暫時(shí)移動(dòng)(以前叫“Moved Temporarily”) |
303 | See Other | 資源可在另一個(gè) URL 獲取 |
304 | Not Modified | 資源未修改,可使用緩存 |
305 | Use Proxy | 必須通過代理訪問(已廢棄) |
306 | Switch Proxy | 該狀態(tài)碼已被廢棄 |
307 | Temporary Redirect | 臨時(shí)重定向,請求方法不變 |
308 | Permanent Redirect | 永久重定向,請求方法不變 |
4xx 客戶端錯(cuò)誤 | ||
400 | Bad Request | 客戶端請求格式錯(cuò)誤 |
401 | Unauthorized | 需要身份驗(yàn)證 |
402 | Payment Required | 預(yù)留狀態(tài)碼,未廣泛使用 |
403 | Forbidden | 服務(wù)器拒絕請求 |
404 | Not Found | 請求的資源不存在 |
405 | Method Not Allowed | 請求方法被禁止 |
406 | Not Acceptable | 服務(wù)器無法滿足請求的內(nèi)容格式 |
407 | Proxy Authentication Required | 需要代理身份驗(yàn)證 |
408 | Request Timeout | 請求超時(shí) |
409 | Conflict | 資源沖突(例如并發(fā)修改) |
410 | Gone | 資源已永久刪除 |
411 | Length Required | 需要指定 Content-Length |
412 | Precondition Failed | 請求頭條件失敗 |
413 | Payload Too Large | 請求體過大,服務(wù)器無法處理 |
414 | URI Too Long | 請求的 URI 過長 |
415 | Unsupported Media Type | 不支持的媒體類型 |
416 | Range Not Satisfiable | 請求的范圍無效 |
417 | Expectation Failed | 服務(wù)器無法滿足 Expect 頭的要求 |
418 | I’m a teapot | 傳統(tǒng)愚人節(jié)彩蛋,表示“我是一個(gè)茶壺” |
421 | Misdirected Request | 請求被發(fā)送到錯(cuò)誤的服務(wù)器 |
422 | Unprocessable Entity | 請求格式正確,但無法處理(WebDAV) |
423 | Locked | 資源被鎖定(WebDAV) |
424 | Failed Dependency | 依賴的請求失?。╓ebDAV) |
425 | Too Early | 服務(wù)器拒絕處理可能被重放的請求 |
426 | Upgrade Required | 需要升級協(xié)議 |
428 | Precondition Required | 需要前置條件 |
429 | Too Many Requests | 客戶端發(fā)送的請求過多(限流) |
431 | Request Header Fields Too Large | 請求頭字段太大 |
451 | Unavailable For Legal Reasons | 由于法律原因不可用 |
5xx 服務(wù)器錯(cuò)誤 | ||
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤 |
501 | Not Implemented | 服務(wù)器不支持該請求 |
502 | Bad Gateway | 服務(wù)器作為網(wǎng)關(guān)時(shí),收到無效響應(yīng) |
503 | Service Unavailable | 服務(wù)器暫時(shí)不可用(過載或維護(hù)) |
504 | Gateway Timeout | 服務(wù)器作為網(wǎng)關(guān)時(shí),未及時(shí)收到上游服務(wù)器響應(yīng) |
505 | HTTP Version Not Supported | 服務(wù)器不支持該 HTTP 版本 |
506 | Variant Also Negotiates | 服務(wù)器內(nèi)部配置錯(cuò)誤 |
507 | Insufficient Storage | 服務(wù)器存儲(chǔ)空間不足(WebDAV) |
508 | Loop Detected | 服務(wù)器檢測到無限循環(huán)(WebDAV) |
510 | Not Extended | 服務(wù)器需要擴(kuò)展請求 |
511 | Network Authentication Required | 需要網(wǎng)絡(luò)身份驗(yàn)證 |
這個(gè)表格已經(jīng)經(jīng)過核對,符合最新的 HTTP 標(biāo)準(zhǔn)。
到此這篇關(guān)于HTTP4種方法(GET、POST、 PUT和DELETE)的文章就介紹到這了,更多相關(guān)http get post put delete內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
el-input寬度跟隨輸入內(nèi)容自適應(yīng)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于el-input寬度跟隨輸入內(nèi)容自適應(yīng)的實(shí)現(xiàn)方法,我們再實(shí)際應(yīng)用中可能需要input文本框能夠根據(jù)輸入字符的所占據(jù)的寬度自動(dòng)調(diào)節(jié)尺寸,需要的朋友可以參考下2023-08-08vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解
今天小編就為大家分享一篇vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue.js中created()與activated()的個(gè)人使用解讀
這篇文章主要介紹了vue.js中created()與activated()的個(gè)人使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Vue使用axios進(jìn)行數(shù)據(jù)異步交互的方法
大家都知道在Vue里面有兩種出名的插件能夠支持發(fā)起異步數(shù)據(jù)傳輸和接口交互,分別是axios和vue-resource,同時(shí)vue更新到2.0之后,宣告不再對vue-resource更新,而是推薦的axios,今天就講一下怎么引入axios,需要的朋友可以參考下2024-01-01vue給數(shù)組中對象排序 sort函數(shù)的用法
這篇文章主要介紹了vue給數(shù)組中對象排序 sort函數(shù)的用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue路由守衛(wèi)+登錄態(tài)管理實(shí)例分析
這篇文章主要介紹了vue路由守衛(wèi)+登錄態(tài)管理,結(jié)合實(shí)例形式分析了vue路由守衛(wèi)與登錄態(tài)管理相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05