1.基本區(qū)別:
GET在瀏覽器回退時(shí)是無害的宪巨,而POST會(huì)再次提交請(qǐng)求。
GET產(chǎn)生的URL地址可以被Bookmark土陪,而POST不可以春寿。
GET請(qǐng)求會(huì)被瀏覽器主動(dòng)cache,而POST不會(huì)尸诽,除非手動(dòng)設(shè)置甥材。
GET請(qǐng)求只能進(jìn)行url編碼,而POST支持多種編碼方式性含。
GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里洲赵,而POST中的參數(shù)不會(huì)被保留。
GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的商蕴,而POST么有叠萍。
對(duì)參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符绪商,而POST沒有限制苛谷。
GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上格郁,所以不能用來傳遞敏感信息腹殿。
GET參數(shù)通過URL傳遞,POST放在Request body中理张。
可以見下面表格:
與http其他請(qǐng)求方法比較:
深入理解:
GET和POST是HTTP協(xié)議中的兩種發(fā)送請(qǐng)求的方法(實(shí)現(xiàn)上面)赫蛇。
HTTP是基于TCP/IP關(guān)于數(shù)據(jù)如何在萬維網(wǎng)中如何通信的協(xié)議。(HTTP的底層是TCP/IP雾叭。所以GET和POST的底層也是TCP/IP悟耘,也就是說,GET/POST都是TCP鏈接织狐。GET和POST能做的事情是一樣一樣的暂幼。你要給GET加上request body筏勒,給POST帶上url參數(shù),技術(shù)上是完全行的通的旺嬉。)
GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包管行;POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。(對(duì)于GET方式的請(qǐng)求邪媳,瀏覽器會(huì)把http header和data一并發(fā)送出去捐顷,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));而對(duì)于POST雨效,瀏覽器先發(fā)送header迅涮,(如果header里面帶了Expect: 100-continue,服務(wù)器響應(yīng)100 continue徽龟,若不帶(或者超時(shí))叮姑,直接發(fā)data),瀏覽器再發(fā)送data据悔,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù)))
Chrome 55.0.2883.95传透,two packets:YES
Safari 10.0.2, two packets:YES
Firefox 49.0, two packets:NO
實(shí)際上:真正的區(qū)別從語義上面,get是獲取指定資源极颓,post是請(qǐng)求符合對(duì)指定資源做處理朱盐。
get:安全、冪等讼昆、可緩存托享,報(bào)文主體沒有語義。
post:不安全浸赫,不冪等闰围,不可緩存。
個(gè)人公號(hào):【排骨肉段】既峡,可以關(guān)注一下羡榴。