(1)對參數的數據類型,GET只接受ASCII字符,而POST沒有限制,容許二進制。
(2)GET在瀏覽器回退/刷新時是無害的,而POST會再次提交請求。
(3)GET請求只能進行url編碼(application/x-www-form-urlencoded),而POST支持多種編碼方式(application/x-www-form-urlencoded 或 multipart/form-data),能夠爲二進制使用多重編碼 - HTML標準對HTTP協議的用法的約定,是瀏覽器攔截不讓發
(4)POST 比 GET 更安全,由於GET參數直接暴露在URL上,POST參數在HTTP消息主體中,並且不會被保存在瀏覽器歷史或 web 服務器日誌中。- GET提交數據還可能會形成Cross-site request forgery攻擊+對於用戶名等敏感信息暴露
(5)對參數數據長度的限制,GET方法URL的長度是受限制的,最大是2048個字符,POST參數數據是沒有限制的。- 瀏覽器/服務器行爲,http沒有作出限制:惡意僞造大額content-length讓服務器響應時間變長
(6)GET請求會被瀏覽器主動緩存,POST不會,除非手動設置。
(7)GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
(8)GET請求可被收藏爲書籤,POST不能。web
1. GET使用URL或Cookie傳參,而POST將數據放在BODY中。
2. GET方式提交的數據有長度限制,則POST的數據則能夠很是大。
3. POST比GET安全,由於數據在地址欄上不可見。瀏覽器
GET冪等,POST不冪等
http的method的定義,只是對行爲的定義,冪等(有無反作用)的定義,沒有強制定義,對其約束很低,爲了服務器/瀏覽器的壓力和安全,纔對http的method作出了一些限制,且對於不用瀏覽器和服務器這些限制是不一樣,其二者本質都是基於TCP傳輸,區別只是冪等緩存
定義:是指同一個請求方法執行屢次和僅執行一次的效果徹底相同。 1.按照RFC規範,PUT,DELETE和安全方法都是冪等的。雖然說是規範,但服務端實現是否冪等是沒法確保的。 2.引入冪等主要是爲了處理同一個請求重複發送的狀況,好比在請求響應前失去鏈接,若是方法是冪等的,就能夠放心地重發一次請求。這也是瀏覽器在後退/刷新時遇到POST會給用戶提示的緣由:POST語義不是冪等的,重複請求可能會帶來意想不到的後果。 3.好比在微博這個場景裏,GET的語義會被用在「看看個人Timeline上最新的20條微博」這樣的場景,而POST的語義會被用在「發微博、評論、點贊」這樣的場景中。