Http系列(四) Http中Get/Post的區別

爲無爲,事無事,味無味。——老子html

Http 系列(-) Http 發展歷史web

Http 系列(二) Http2 中的多路複用瀏覽器

Http 系列(三) Http/Tcp 三次握手和四次揮手緩存

Http 系列(四) Http 中 Get/Post 的區別安全

簡介

在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GETPOST服務器

  • GET - 從指定的資源請求數據。
  • POST - 向指定的資源提交要被處理的數據

最直觀的區別就是GET把參數包含在URL中,POST經過request body傳遞參數。POSTGET大體區別以下表所示: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 中

區別


其實GETPOST都是http協議中的兩種發送請求的方法。併發

  • GET在瀏覽器回退時是無害的,而POST會再次提交請求。
  • GET產生的URL地址能夠被Bookmark,而POST不能夠。
  • GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
  • GET請求只能進行url編碼,而POST支持多種編碼方式。
  • GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
  • GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
  • 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
  • GET比POST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息。
  • GET參數經過URL傳遞,POST放在Request body中。
  • http協議並未規定get和post的長度限制
  • get的最大長度限制是由於瀏覽器和web服務器限制了URL的長度
  • 對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)

其實不少人說get請求比post請求快,主要是底下兩條

  1. get請求比post請求少一步
  2. get請求能夠緩存

get請求過程app

  1. 瀏覽器請求tcp鏈接(第一次握手)
  2. 服務器答應進行tcp鏈接(第二次握手)
  3. 瀏覽器確認,併發送get請求頭和數據(第三次握手,這個報文比較小,因此http會在此時進行第一次數據發送)
  4. 服務器返回200 OK響應

post請求過程tcp

  1. 瀏覽器請求tcp鏈接(第一次握手)
  2. 服務器答應進行tcp鏈接(第二次握手)
  3. 瀏覽器確認,併發送post請求頭(第三次握手,這個報文比較小,因此http會在此時進行第一次數據發送)
  4. 服務器返回100 Continue響應
  5. 瀏覽器發送數據
  6. 服務器返回200 OK響應

總結

  • GET在瀏覽器回退時是無害的,而POST再次提交請求。
  • GET產生的URL地址能夠被Bookmark,而POST不能夠。
  • GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
  • GET請求只能進行url編碼,而POST支持多種編碼方式。
  • GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
  • GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
  • 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
  • GETPOST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息。
  • GET參數經過URL傳遞,POST放在Request body中。
  • http協議並未規定getpost的長度限制
  • get的最大長度限制是由於瀏覽器和web服務器限制了URL的長度
  • 對於GET方式的請求,瀏覽器會把http headerdata一併發送出去,服務器響應200(返回數據);而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)

參考

HTTP 方法:GET 對比 POST

GET和POST兩種基本請求方法的區別

相關文章
相關標籤/搜索