前端HTTP請(qǐng)求方式之GET、POST與其他請(qǐng)求方法詳解
前言
在前后端分離開(kāi)發(fā)中,最常見(jiàn)的問(wèn)題之一就是:
- GET 和 POST 有什么區(qū)別?
- PUT、DELETE、PATCH 是干什么的?
- 為什么有的接口用 POST 不能用 GET?
- 為什么有時(shí)候 GET 能成功,POST 卻報(bào)錯(cuò)?
本文系統(tǒng)整理 HTTP 請(qǐng)求方式的區(qū)別、原理與使用場(chǎng)景,結(jié)合 Vue + Axios 實(shí)際開(kāi)發(fā)說(shuō)明。
定義概念 + 縮寫(xiě)
一、HTTP 是什么?
HTTP(HyperText Transfer Protocol)
超文本傳輸協(xié)議,是瀏覽器與服務(wù)器之間通信的規(guī)則。
二、常見(jiàn)請(qǐng)求方式
| 方法 | 作用 | 是否修改數(shù)據(jù) |
|---|---|---|
| GET | 獲取數(shù)據(jù) | 否 |
| POST | 提交數(shù)據(jù) | 是 |
| PUT | 更新數(shù)據(jù)(整體替換) | 是 |
| PATCH | 局部更新 | 是 |
| DELETE | 刪除數(shù)據(jù) | 是 |
| HEAD | 只獲取響應(yīng)頭 | 否 |
| OPTIONS | 查詢(xún)支持的請(qǐng)求方式 | 否 |
性質(zhì)
一、GET 請(qǐng)求
特點(diǎn)
- 用于獲取數(shù)據(jù)
- 參數(shù)放在 URL 中
- 可被緩存
- 冪等(多次請(qǐng)求結(jié)果相同)
示例
axios.get('/api/user/list', {
params: {
page: 1,
pageSize: 10
}
})生成的請(qǐng)求:
GET /api/user/list?page=1&pageSize=10
適用場(chǎng)景
- 查詢(xún)列表
- 查詢(xún)?cè)斍?/li>
- 查詢(xún)分頁(yè)數(shù)據(jù)
二、POST 請(qǐng)求
特點(diǎn)
- 用于提交數(shù)據(jù)
- 數(shù)據(jù)放在請(qǐng)求體(body)
- 不會(huì)被瀏覽器緩存
- 常用于創(chuàng)建資源
示例
axios.post('/api/user/login', {
username: 'admin',
password: '123456'
})數(shù)據(jù)不會(huì)出現(xiàn)在 URL 中。
適用場(chǎng)景
- 登錄
- 表單提交
- 創(chuàng)建資源
- 復(fù)雜查詢(xún)條件
三、PUT 請(qǐng)求
特點(diǎn)
- 用于更新資源
- 通常是“整體替換”
- 冪等
示例
axios.put('/api/user', {
id: 1,
name: '張三',
phone: '123456'
})四、PATCH 請(qǐng)求
特點(diǎn)
- 局部更新
- 只修改某個(gè)字段
axios.patch('/api/user/1', {
phone: '999999'
})五、DELETE 請(qǐng)求
特點(diǎn)
- 刪除資源
- 一般通過(guò) id 刪除
axios.delete('/api/user', {
params: { id: 1 }
})六、GET 與 POST 核心區(qū)別總結(jié)
| 對(duì)比項(xiàng) | GET | POST |
|---|---|---|
| 參數(shù)位置 | URL | Body |
| 安全性 | 較低 | 較高 |
| 數(shù)據(jù)長(zhǎng)度 | 有限制 | 基本無(wú)限制 |
| 是否緩存 | 是 | 否 |
| 是否冪等 | 是 | 否 |
| 用途 | 查詢(xún) | 提交 |
使用步驟
一、在 Axios 中的標(biāo)準(zhǔn)寫(xiě)法
統(tǒng)一寫(xiě)法(推薦)
axios({
method: 'post',
url: '/api/user/login',
data: {
username: 'admin',
password: '123456'
}
})二、什么時(shí)候用 GET?
? 查詢(xún)
? 不修改服務(wù)器數(shù)據(jù)
? 參數(shù)簡(jiǎn)單
例如:
GET /admin/category/page?page=1&pageSize=10
三、什么時(shí)候用 POST?
? 登錄
? 提交表單
? 創(chuàng)建數(shù)據(jù)
? 查詢(xún)條件復(fù)雜
例如:
POST /admin/employee/login
四、為什么不能亂用 GET?
如果用 GET 做登錄:
GET /login?username=admin&password=123456
密碼會(huì)暴露在瀏覽器地址欄:
- 不安全
- 會(huì)被瀏覽器記錄
- 會(huì)被代理服務(wù)器記錄
所以登錄必須用 POST。
五、RESTful 設(shè)計(jì)規(guī)范建議
| 操作 | 方法 |
|---|---|
| 查詢(xún)列表 | GET |
| 查詢(xún)單個(gè) | GET |
| 新增 | POST |
| 修改 | PUT |
| 局部修改 | PATCH |
| 刪除 | DELETE |
總結(jié)
- GET 用于查詢(xún),不修改數(shù)據(jù)
- POST 用于提交,修改服務(wù)器數(shù)據(jù)
- PUT 是整體更新
- PATCH 是局部更新
- DELETE 是刪除
- GET 參數(shù)在 URL,POST 參數(shù)在 body
- 登錄、密碼、敏感數(shù)據(jù)一定用 POST
一句話(huà)總結(jié):
GET 是“看”,POST 是“改”
參考文獻(xiàn)
[1] HTTP/1.1 協(xié)議規(guī)范
[2] Axios 官方文檔


到此這篇關(guān)于前端HTTP請(qǐng)求方式之GET、POST與其他請(qǐng)求方法的文章就介紹到這了,更多相關(guān)HTTP GET、POST與其他請(qǐng)求方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)錨點(diǎn)定位功能的方法實(shí)例
“錨點(diǎn)”功能在實(shí)際應(yīng)用設(shè)計(jì)的好,可以提高用戶(hù)體驗(yàn),這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)錨點(diǎn)定位功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
前端實(shí)現(xiàn)帶滾動(dòng)區(qū)域的DOM長(zhǎng)截圖導(dǎo)出完整步驟
前端實(shí)現(xiàn)截圖功能有多種方式,開(kāi)發(fā)中實(shí)現(xiàn)截圖也是常見(jiàn)的功能需求,這篇文章主要介紹了前端實(shí)現(xiàn)帶滾動(dòng)區(qū)域的DOM長(zhǎng)截圖導(dǎo)出的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2026-02-02
Bootstrap實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)(親測(cè)可用)
這篇文章主要為大家詳細(xì)介紹了Bootstrap實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
QRCode.js二維碼生成并能長(zhǎng)按識(shí)別
這篇文章主要為大家詳細(xì)介紹了QRCode.js二維碼生成并能長(zhǎng)按識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
javascript判斷ie瀏覽器6/7版本加載不同樣式表的實(shí)現(xiàn)代碼
ie6/ie7的兼容問(wèn)題很讓人苦惱,我們可以針對(duì)這兩個(gè)版本的瀏覽器單獨(dú)寫(xiě)?yīng)毩⒌臉邮奖?,?lái)解決兼容問(wèn)題。這里的例子以判斷ie6與ie7來(lái)加載不同的樣式表2011-12-12
微信小程序webview與h5通過(guò)postMessage實(shí)現(xiàn)實(shí)時(shí)通訊的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序webview與h5通過(guò)postMessage實(shí)現(xiàn)實(shí)時(shí)通訊的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

