爲無爲,事無事,味無味。——老子html
在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET
和 POST
。服務器
最直觀的區別就是GET
把參數包含在URL
中,POST
經過request body
傳遞參數。POST
和GET
大體區別以下表所示:markdown
# | 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 中 |
其實GET
和POST
都是http協議中
的兩種發送請求的方法。併發
get請求過程:app
post請求過程:tcp
GET
在瀏覽器回退時是無害的,而POST
會再次提交請求。GET
產生的URL地址能夠被Bookmark
,而POST
不能夠。GET
請求會被瀏覽器主動cache
,而POST
不會,除非手動設置。GET
請求只能進行url
編碼,而POST
支持多種編碼方式。GET
請求參數會被完整保留在瀏覽器歷史記錄裏,而POST
中的參數不會被保留。GET
請求在URL
中傳送的參數是有長度限制的,而POST
麼有。GET
只接受ASCII
字符,而POST
沒有限制。GET
比POST
更不安全,由於參數直接暴露在URL
上,因此不能用來傳遞敏感信息。GE
T參數經過URL
傳遞,POST
放在Request body
中。http
協議並未規定get
和post
的長度限制get
的最大長度限制是由於瀏覽器和web
服務器限制了URL
的長度GET
方式的請求,瀏覽器會把http header
和data
一併發送出去,服務器響應200
(返回數據);而對於POST,瀏覽器先發送header
,服務器響應100 continue
,瀏覽器再發送data
,服務器響應200 ok
(返回數據)