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


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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM