在做完一個大的項目以后又產(chǎn)生了一些思考,重新審視了一個面試中常常被問到的問題乾戏,GET方法與POST方法的區(qū)別胡本,其實網(wǎng)上有許多“標準”答案牌柄,但看過以后感覺與自己的想法有些許的出入,最后看到了幾篇非常有見解的文章侧甫,產(chǎn)生了一些自己的理解珊佣。詳細分析:語義之爭,get與post區(qū)別的真相披粟,HTTP|GET 和 POST 區(qū)別咒锻?網(wǎng)上多數(shù)答案都是錯的!守屉。(RFC2616)
HTTP請求中GET與POST方法究竟有什么區(qū)別呢惑艇??
個人認為最本質(zhì)的區(qū)別只有一個拇泛,就是語義上的區(qū)別滨巴,GET的語義是請求獲取指定的資源,POST的語義是根據(jù)請求負荷(報文主體)對指定的資源做出處理俺叭,具體的處理方式視資源類型而不同恭取。換句通俗的話說,其兩者均為HTTP中的請求方法熄守,報文的格式相同蜈垮,底層也都需要借助TCP連接進行實現(xiàn),只是在設計HTTP官方文檔RFC的時候裕照,GET和POST被設定為了兩種不同的用途攒发,并在此基礎上根據(jù)用途的不同,進行不同的默認配置(包括是否安全晋南,是否冪等惠猿,是否可緩存,信息存儲位置等等)负间。
但是規(guī)范畢竟是規(guī)范偶妖,并不是強制要求,你可以在POST方法的URL中添加數(shù)據(jù)唉擂,也可以使用GET方法傳輸?shù)膮?shù)對數(shù)據(jù)庫進行操作,只是這些并不符合規(guī)范可能會產(chǎn)生一些問題檀葛,比如你在瀏覽器中輸入域名后玩祟,瀏覽器會使用GET方法進行網(wǎng)站的信息獲取,再進行頁面渲染屿聋,如果這時候使用POST方法對網(wǎng)站會對新的信息進行處理空扎,可能會引發(fā)加載或渲染錯誤等問題藏鹊,又比如在提交表單時不使用POST方法,再進行頁面刷新或后退等操作時转锈,就可能會產(chǎn)生重復提交等問題盘寡。但最后話又說回來了,在某些自己配置的接口上撮慨,若對于GET和POST的語義并沒有較大區(qū)分竿痰,不會產(chǎn)生錯誤的情況下,則可替換的使用GET和POST方法使用AJAX等實現(xiàn)發(fā)送HTTP請求砌溺。