本篇文章分兩部分,第一部分能夠列爲初爲新人的裝逼失敗模式,第二部分列爲修煉低調模式。
裝逼失敗模式:99%的人對GET和POST的認識
修煉低調模式:1%不知道的進階認識面試
GET和POST,在咱們平常WEB開發中,是最經常使用的數據傳輸方式。面試中咱們也常常會遇到。
通常咱們在瀏覽器輸入一個網址URL訪問網站都是GET方式請求;
在HTML FROM表單中,能夠經過設置method指定提交方式爲GET或者POST方式,默認爲GET提交方式後端
HTTP定義了與服務器交互的不一樣方法,其中最基本的四種:GET,POST,PUT,DELETE,HEAD;
其中GET和HEAD被稱爲安全方法,由於使用GET和HEAD的HTTP請求不會產生什麼動做。不會產生動做意味着GET和HEAD的HTTP請求不會在服務器上產生任何結果。可是安全方法並非什麼動做都不產生,這裏的安全方法僅指不會修改信息。瀏覽器
GET和POST咱們比較經常使用,其它幾種實際應用比較少用到,在此僅做了解。緩存
GET請求的數據會附加在URL以後,以?分割URL和傳輸數據,多個參數之間以&鏈接,
如"http://www.xxx.com/product?type=shoe&price=100&sex=male"
數據格式有如下注意點:安全
"%E4%BD%A0%E5%A5%BD"
其中%XX
中的XX
爲該符號以16進製表示的ASCII碼。POST請求會把請求的數據放置在HTTP請求包的包體中,GET傳輸的數據會直接暴露在URL中,而POST請求則不會。服務器
GET方式傳輸的數據最多隻能是1024字節,
由於GET是經過URL提交數據,那麼GET可提交的數據量就跟URL的長度有直接關係,URL自己不存在參數上限的問題,HTTP協議規範也沒有對URL長度進行限制。
這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系統的支持。網絡
注意:限制是針對整個URL長度,不單是傳輸的數據長度。併發
POST方式理論上沒有限制,可傳較大的數據。起限制做用的是服務器的處理程序的處理能力。Apache, Nigx, IIS服務器自身可配置限制傳輸大小。網站
GET傳輸的數據直接暴露在URL中,若是咱們在作用戶登陸時,須要傳輸登陸賬號及密碼到後端作驗證,若是用GET方式,那麼帳戶密碼直接暴露在URL裏面,是極其危險的。
並且瀏覽器緩存的機制,訪問過的網站URL會被保存在瀏覽器歷史記錄裏,其餘人可經過歷史記錄查看訪問網站URL,直接獲取到傳輸的數據。
極可能受到 "Cross-site request forgery"(中文名稱:跨站請求僞造) 攻擊。
不過POST的數據也是能夠被攔截的。加密
總結:
"http://www.xxx.com/product?keywords=xxx&page=2"
;曾經的曾經,我也是那99%的一員,還把本身概括的文章發給新人同事看,而後裝逼失敗,被老大引導練成最後的這1%。
GET和POST本質上是沒有區別的,它們是HTTP協議中的兩種發送請求的方式。
HTTP是基於TCP/IP的關於數據如何在萬維網中通訊的協議,即HTTP的底層是TCP/IP,因此GET和POST的底層也是TCP/IP,也就是說:GET/POST都是TCP連接。
給POST帶上url參數,給GET加上request body,技術上是能夠實現的。
爲了更方便的管理,避免混亂,HTTP給這些請求定義GET,POST,PUT,DELETE。
而數據大小,則是由於瀏覽器的限制形成的。
因此GET和POST本質上就是TCP連接,並沒有差異。可是因爲HTTP的規定和瀏覽器/服務器的限制,致使他們在應用過程當中體現出一些不一樣
GET產生一個TCP數據包,而POST產生兩個TCP數據包
GET的請求,瀏覽器會把http header和data一併發送出去,服務器返回200(返回數據)
POST的請求,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200(返回數據)
由於POST須要兩步,時間上消耗的多一點,
不過網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。
網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢
並非全部瀏覽器POST發送兩次包,Fiefox就發送一次。
最後的最後,當你之後被別人問到的時候,你就能夠。。。。。。請開始你的表演