菜鳥學Java(十一)——GET與POST

劉水鏡發表於2013-08-27

相信大家在面試的時候經常會被問到: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的區別,網上很多答案都是不夠準確的。在網上查詢資料的時候一定要多看一些,對比對比,這樣可以幫助你鑑別是對是錯。不至於一葉障目被錯誤的資訊所誤導。要保持三分的懷疑,所謂盡信書不如無書。希望這篇文章對大家以後面試的時候提供一點點的幫助。歡迎留言交流。




相關文章