當我們不通過重新載入頁面,用Ajax訪問伺服器的時候,有兩個選擇可以將請求資訊傳送到伺服器上。這兩個選擇分別是GET和POST。
在把請求資訊發送到伺服器上以載入新的頁面時,這兩個選擇有兩個不同之處。第一個區別是你是請求了資訊的一小部分而不是整個頁面。第二個區別也是最明顯的區別是由於Ajax請求不會出現在地址欄中,因此當發送請求時,在訪問者的螢幕上是看不出什麼異同的。使用GET產生調用不會暴露域和它們的值,使用POST也不會暴露。因此,我們要怎樣在這兩者之間作出選擇呢?
初學者可能犯的一個錯誤是對於大多數的調用都使用GET命令,僅僅因為這一命令相對而言更容易編寫。GET與POST調用之間最顯著的差異是當發出載入新頁面請求時,GET調用對於同樣數量的資料有著相同的限制。唯一的區別是你處理的少量的Ajax請求資料,而你並不想通過這種長度啟動並執行限制來完成頁面的載入。初學者可能會在少數情況下,如他們確實需要傳送更多資訊時,使用POST。
當我們有大量資料要傳送時最好的辦法是一次發出多個只傳遞少量資訊的Ajax調用時。如果你正用一個Ajax調用發送大量資料,那麼最好是結束這種做法,因為這樣做並不能節約時間。
因此,需要傳送大量資料能成為我們在GET和POST之間猶豫不決的理由嗎?這兩個方法都是為不同的目的而設計的,兩者的不同也在於其使用目的。這一說法不僅適用於GET和POST的使用,也適用於其他的方法。
GET的目的就如同其名字一樣是用於擷取資訊的。它旨在顯示出頁面上你要閱讀的資訊。瀏覽器會緩衝GET請求的執行結果,如果同樣的GET請求再次發出,瀏覽器就會顯示緩衝的結果而不是重新運行整個請求。這一流程不同於瀏覽器的處理過程,但是它是有意設計成這樣以使GET調用更有效率。GET調用會檢索要顯示在頁面中的資料,資料不會在伺服器上被更改,因此重新請求相同資料的時候會得到相同的結果。
POST方法應該用於你需要補救伺服器資訊的地方。如某調用要更改儲存在伺服器上的資料,而從兩個同樣的POST調用返回的結果或許會完全不同,因為第二個POST調用的值與第一個的值不相同,這是由於第一個調用已經更新了其中一些值。POST調用通常會從伺服器上擷取響應而不是保持前一個響應的緩衝。
因此,不要用資料的量來決定是要選擇GET還是POST,而應該按照目的在兩者間作出選擇。如果調用是要檢索伺服器上的資料則使用GET。如果要檢索的值會隨時間和更新進程的改變而改變則要在GET調用中添加一個目前時間參數,這樣後面的調用才不會使用先前的不正確的緩衝。如果調用是向伺服器上發送任意資料,就可以使用POST。
事實上,我們不應該不僅僅只將這個標準作為選擇怎樣使用GET和POST調用的標準,在處理頁面處理形式的時候也可以將它作為取捨這兩個調用的標準。