相信大家在面試的時候經常會被問到:GET與POST有什么區別吧?你是怎么回答的呢?POST比GEt安全?GET有URL的長度限制而POST沒有或者很大?GET通過URL或者Cookie傳參數,POST將數據放到Body中?等等... 但是這些是它們之間的區別嗎?或者說這些說法對嗎?想知道嗎?那就跟我來吧!Follow Me!
安全問題:
有人覺得GET方式會把數據寫到URL中,這樣數據就暴露了,就不安全了;而POST則不會有這樣的情況,所以就安全了。如果這么想就錯了,GET和POST都是采用明文傳輸的,隨便用個HTTP截取工具就能輕松獲得傳輸的信息。所以GET和POST在這個安全層面沒什么明顯區別。
如果非要說他們兩個有安全方面的區別,也不是沒有,不過這里說的安全不是指的上面的那種安全。語義上GET是獲取指定URL上的資源,是讀操作,重要的一點是不論對某個資源GET多少次,它的狀態是不會改變的,在這個意義上,我們說GET是安全的(不是被密碼學或者數據保護意義上的安全)。因為GET是安全的,所以GET返回的內容可以被瀏覽器,Cache服務器緩存起來(其中還有很多細節,但不影響這里的討論)。
而POST的語意是對指定資源“追加/添加”數據,所以是不安全的,每次提交的POST,參與的代碼都會認為這個操作會修改操作對象資源的狀態,於是,瀏覽器當你刷新的時候會跳出確認框,緩存服務器不會緩存POST請求返回內容。
長度限制:
HTTP協議規范也沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。
理論上講,POST也是沒有大小限制的。HTTP協議規范也沒有進行大小限制。起限制作用的是服務器的處理程序的處理能力。
參數傳遞:
HTTP並沒有要求,POST數據就要放在BODY中。也沒有要求如果是GET,數據(參數)就一定要放在URL中而不能放在BODY中。也就是說POST也可以放到URL中,GET也可以放到BODY中。
關於GET和POST的區別,網上很多答案都是不夠准確的。在網上查找資料的時候一定要多看一些,對比對比,這樣可以幫助你鑒別是對是錯。不至於一葉障目被錯誤的信息所誤導。要保持三分的懷疑,所謂盡信書不如無書。希望這篇文章對大家以后面試的時候提供一點點的幫助。歡迎留言交流。