摘要:對數據長度的限制是的。安全性與相比,的安全性較差,因為所發送的數據是的一部分。和只是協議中兩種請求方式,而協議是基于的應用層協議,無論還是,用的都是同一個傳輸層協議,所以在傳輸上,沒有區別。
1 前言
眾所周知,在我們開發項目的過程中,關于POST與GET請求是我們不得不掌握的知識,那么它們兩者之間又有什么區別呢?接下來,我們一起從HTTP報文等角度來探討學習一下關于兩者的不同
2 HTTP請求方法HTTP 定義了一組請求方法, 以表明要對給定資源執行的操作。指示針對給定資源要執行的期望動作. 雖然他們也可以是名詞, 但這些請求方法有時被稱為HTTP動詞. 每一個請求方法都實現了不同的語義, 但一些共同的特征由一組共享:: 例如一個請求方法可以是 safe, idempotent, 或 cacheable.
方法名稱 | 用法 |
---|---|
GET | GET方法請求一個指定資源的表示形式. 使用GET的請求應該只被用于獲取數據. |
HEAD | HEAD方法請求一個與GET請求的響應相同的響應,但沒有響應體. |
POST | 用于將實體提交到指定的資源,通常導致在服務器上的狀態變化或副作用. |
PUT | PUT方法用請求有效載荷替換目標資源的所有當前表示。 |
DELETE | DELETE方法刪除指定的資源。 |
CONNECT | CONNECT方法建立一個到由目標資源標識的服務器的隧道。 |
OPTIONS | OPTIONS方法用于描述目標資源的通信選項。 |
TRACE | TRACE方法沿著到目標資源的路徑執行一個消息環回測試。 |
PATCH | PATCH方法用于對資源應用部分修改。 |
W3school:http://www.w3school.com.cn/ta...
項目 | GET | POST |
---|---|---|
后退按鈕/刷新 | 無害 | 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。 |
書簽 | 可收藏為書簽 | 不可收藏為書簽 |
緩存 | 能被緩存 | 不能緩存 |
編碼類型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。為二進制數據使用多重編碼。 |
歷史 | 參數保留在瀏覽器歷史中。 | 參數保留在瀏覽器歷史中。 |
對數據長度的限制 | 是的。當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。 | 無限制 |
對數據類型的限制 | 只允許 ASCII 字符。 | 沒有限制。也允許二進制數據。 |
安全性 | 與 POST 相比,GET 的安全性較差,因為所發送的數據是 URL 的一部分。在發送密碼或其他敏感信息時絕不要使用 GET ! | POST 比 GET 更安全,因為參數不會被保存在瀏覽器歷史或 web 服務器日志中。 |
可見性 | 數據在 URL 中對所有人都是可見的。 | 數據不會顯示在 URL 中。 |
副作用指對服務器上的資源做改變,搜索是無副作用的,注冊是副作用的。
冪等指發送 M 和 N 次請求(兩者不相同且都大于 1),服務器上資源的狀態一致,比如注冊 10 個和 11 個帳號是不冪等的,對文章進行更改 10 次和 11 次是冪等的。因為前者是多了一個賬號(資源),后者只是更新同一個資源。
在規范的應用場景上說,Get 多用于無副作用,冪等的場景,例如搜索關鍵字。Post 多用于副作用,不冪等的場景,例如注冊。
5 技術上的不同Get 請求能緩存,Post 不能
Post 相對 Get 安全一點點,因為Get 請求都包含在 URL 里(當然你想寫到 body 里也是可以的),且會被瀏覽器保存歷史紀錄。Post 不會,但是在抓包的情況下都是一樣的。
URL有長度限制,會影響 Get 請求,但是這個長度限制是瀏覽器規定的,不是 RFC 規定的
Post 支持更多的編碼類型且不對數據類型限制
6 首部首部分為請求首部和響應首部,并且部分首部兩種通用,接下來我們就來學習一部分的常用首部。
通用首部
通用字段 | 作用 |
---|---|
Cache-Control | 控制緩存的行為 |
Connection | 瀏覽器想要優先使用的連接類型,比如 keep-alive |
Date | 創建報文時間 |
Pragma | 報文指令 |
Via | 代理服務器相關信息 |
Transfer-Encoding | 傳輸編碼方式 |
Upgrade | 要求客戶端升級協議 |
Warning | 在內容中可能存在錯誤 |
請求首部
請求首部 | 作用 |
---|---|
Accept | 能正確接收的媒體類型 |
Accept-Charset | 能正確接收的字符集 |
Accept-Encoding | 能正確接收的編碼格式列表 |
Accept-Language | 能正確接收的語言列表 |
Expect | 期待服務端的指定行為 |
From | 請求方郵箱地址 |
Host | 服務器的域名 |
If-Match | 兩端資源標記比較 |
If-Modified-Since | 本地資源未修改返回 304(比較時間) |
If-None-Match | 本地資源未修改返回 304(比較標記) |
User-Agent | 客戶端信息 |
Max-Forwards | 限制可被代理及網關轉發的次數 |
Proxy-Authorization | 向代理服務器發送驗證信息 |
Range | 請求某個內容的一部分 |
Referer | 表示瀏覽器所訪問的前一個頁面 |
TE | 傳輸編碼方式 |
響應首部
響應首部 | 作用 |
---|---|
Accept-Ranges | 是否支持某些種類的范圍 |
Age | 資源在代理緩存中存在的時間 |
ETag | 資源標識 |
Location | 客戶端重定向到某個 URL |
Proxy-Authenticate | 向代理服務器發送驗證信息 |
Server | 服務器名字 |
WWW-Authenticate | 獲取資源需要的驗證信息 |
實體首部
實體首部 | 作用 |
---|---|
Allow | 資源的正確請求方式 |
Content-Encoding | 內容的編碼格式 |
Content-Language | 內容使用的語言 |
Content-Length | request body 長度 |
Content-Location | 返回數據的備用地址 |
Content-MD5 | Base64加密格式的內容 MD5檢驗值 |
Content-Range | 內容的位置范圍 |
Content-Type | 內容的媒體類型 |
Expires | 內容的過期時間 |
Last_modified | 內容的最后修改時間 |
結論:GET 和 POST 方法沒有實質區別,只是報文格式不同。
GET 和 POST 只是 HTTP 協議中兩種請求方式,而 HTTP 協議是基于 TCP/IP 的應用層協議,無論 GET 還是 POST,用的都是同一個傳輸層協議,所以在傳輸上,沒有區別。
報文格式上,不帶參數時,最大區別就是第一行方法名不同
POST方法請求報文第一行是這樣的POST /products/create HTTP/1.1
GET方法請求報文第一行是這樣的 GET /products?name=zs&age=18 HTTP/1.1
是的,不帶參數時他們的區別就僅僅是報文的前幾個字符不同而已
帶參數時報文的區別呢? 在約定中,GET 方法的參數應該放在 url 中,POST 方法參數應該放在 body 中
舉個例子,如果參數是 pname="小米9", pprice=3500
GET 請求方法的報文如下:
POST 請求方法的報文如下:
現在我們知道了兩種方法本質上是 TCP 連接,沒有差別,也就是說,如果我不按規范來也是可以的。我們可以在 URL 上寫參數,然后方法使用 POST;也可以在 Body 寫參數,然后方法使用 GET。當然,這需要服務端支持。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105229.html
摘要:與區別本文參考簡單介紹和是與服務器交互的方式,說到方式,有。他們的作用分別是對服務器資源的增刪改查。區別分析把請求的數據放在上,即協議頭上,其格式為以分割和傳輸數據,參數之間以相連。請求只能進行編碼,而支持多種編碼方式。 post與get區別 本文參考:https://segmentfault.com/a/1190000009512784 簡單介紹 get和post是HTTP與服務器交...
摘要:與區別本文參考簡單介紹和是與服務器交互的方式,說到方式,有。他們的作用分別是對服務器資源的增刪改查。區別分析把請求的數據放在上,即協議頭上,其格式為以分割和傳輸數據,參數之間以相連。請求只能進行編碼,而支持多種編碼方式。 post與get區別 本文參考:https://segmentfault.com/a/1190000009512784 簡單介紹 get和post是HTTP與服務器交...
摘要:了解歷史和是與服務器交互的方式,說到方式,其實總共有四種。區別分析把請求的數據放在上,即協議頭上,其格式為以分割和傳輸數據,參數之間以相連。在瀏覽器回退時是無害的,會再次提交請求。請求只能進行編碼,而支持多種編碼方式。 了解歷史 get和post是HTTP與服務器交互的方式, 說到方式,其實總共有四種: post、delete、put、get。 他們的作用分別是對服務器資源的增、刪、改...
摘要:九安卓中如何取出日志信息把安卓系統日志信息實時導入到本地運行使用某個,實時獲取該的日志信息里面的返回信息接口自動化面試題一按你的理解,軟件接口是什么答就是指程序中具體負責在不同模塊之間傳輸或接受數據的并做處理的類或者函數。 ...
閱讀 1820·2023-04-26 01:55
閱讀 1083·2021-09-30 09:47
閱讀 1679·2019-08-30 15:54
閱讀 744·2019-08-30 15:53
閱讀 697·2019-08-30 15:52
閱讀 1140·2019-08-30 15:44
閱讀 2414·2019-08-30 14:06
閱讀 1062·2019-08-29 16:39