在做完一個(gè)大的項(xiàng)目以后又產(chǎn)生了一些思考,重新審視了一個(gè)面試中常常被問(wèn)到的問(wèn)題,GET方法與POST方法的區(qū)別,其實(shí)網(wǎng)上有許多“標(biāo)準(zhǔn)”答案,但看過(guò)以后感覺(jué)與自己的想法有些許的出入,最后看到了幾篇非常有見(jiàn)解的文章,產(chǎn)生了一些自己的理解。詳細(xì)分析:語(yǔ)義之爭(zhēng),get與post區(qū)別的真相,HTTP|GET 和 POST 區(qū)別?網(wǎng)上多數(shù)答案都是錯(cuò)的!。(RFC2616)
HTTP請(qǐng)求中GET與POST方法究竟有什么區(qū)別呢??
個(gè)人認(rèn)為最本質(zhì)的區(qū)別只有一個(gè),就是語(yǔ)義上的區(qū)別,GET的語(yǔ)義是請(qǐng)求獲取指定的資源,POST的語(yǔ)義是根據(jù)請(qǐng)求負(fù)荷(報(bào)文主體)對(duì)指定的資源做出處理,具體的處理方式視資源類型而不同。換句通俗的話說(shuō),其兩者均為HTTP中的請(qǐng)求方法,報(bào)文的格式相同,底層也都需要借助TCP連接進(jìn)行實(shí)現(xiàn),只是在設(shè)計(jì)HTTP官方文檔RFC的時(shí)候,GET和POST被設(shè)定為了兩種不同的用途,并在此基礎(chǔ)上根據(jù)用途的不同,進(jìn)行不同的默認(rèn)配置(包括是否安全,是否冪等,是否可緩存,信息存儲(chǔ)位置等等)。
但是規(guī)范畢竟是規(guī)范,并不是強(qiáng)制要求,你可以在POST方法的URL中添加數(shù)據(jù),也可以使用GET方法傳輸?shù)膮?shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,只是這些并不符合規(guī)范可能會(huì)產(chǎn)生一些問(wèn)題,比如你在瀏覽器中輸入域名后,瀏覽器會(huì)使用GET方法進(jìn)行網(wǎng)站的信息獲取,再進(jìn)行頁(yè)面渲染,如果這時(shí)候使用POST方法對(duì)網(wǎng)站會(huì)對(duì)新的信息進(jìn)行處理,可能會(huì)引發(fā)加載或渲染錯(cuò)誤等問(wèn)題,又比如在提交表單時(shí)不使用POST方法,再進(jìn)行頁(yè)面刷新或后退等操作時(shí),就可能會(huì)產(chǎn)生重復(fù)提交等問(wèn)題。但最后話又說(shuō)回來(lái)了,在某些自己配置的接口上,若對(duì)于GET和POST的語(yǔ)義并沒(méi)有較大區(qū)分,不會(huì)產(chǎn)生錯(cuò)誤的情況下,則可替換的使用GET和POST方法使用AJAX等實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求。