Get與Post的區別

  下午回學校的走半路上的時候,接到了面試的電話,由於時間比較着急外加上面試時間不算長,而後揹着書包,蹲在馬路牙子上完成了面試,問了一點項目相關的問題,問了一個Ajax中請求數據中Get和Post兩種方式的區別,只知道Get應用於較短的數據請求,Post則相反,而後接着問了Get短的範圍是多少,問的懵逼了,準備問一下小哥這個問題的答案,而後時間比較緊他很快就掛電話了,因此本身回來查了查。面試

 

 

首先,瀏覽器

一、最直觀的Get把數據請求的參數放在了URL中,而Post則是經過request body傳遞參數,安全

二、Get請求在瀏覽器進行回退的時候是無害的,即不會再次進行提交請求,可是Post回再次提交請求;服務器

三、Get請求會被瀏覽器主動cache,而Post不會;網絡

四、Get請求只能進行url編碼,可是Post支持多種編碼方式;編碼

五、Get請求會被完整保留在瀏覽器的歷史記錄中,可是Post不會;url

六、Get請求在URL中傳送的參數是有長度限制的,而Post沒有;(面試問的問題就是這個)開發

七、對於參數的類型,Get請求只是接受ASCII字符,Post沒有限制;循環

八、Get請求會將傳遞的參數直接暴露在URL中,不可以傳遞敏感信息,Post則不是;request

 

而後,來看看Get請求數據長度的限制。其實在Http中,對於Get長度是沒有限制的,之因此產生限制,是由於不一樣瀏覽器以及服務器對它的限制。

瀏覽器的限制,超過該長度的字符之後,提交按鈕會無效致使沒法提交數據請求。

  • 一、IE:最大URL字符長度2083個字符;
  • 二、Firefox:最大URL字符長度65536個字符;
  • 三、Safari:最大URL字符長度80000個字符;
  • 四、Opera:最大URL字符長度190000個字符;
  • 五、Chrome:最大URL字符長度8192個字符;

服務器的限制:

一、Apache:最大URL長度8192個字符;

二、IIS:最大URL長度16384個字符;

這是Get與Post的一些基本區別,而後,還有更深層的區別。

 

 

其次,

Get和Post本質上仍是TCP連接,只不過TCP至關於一輛卡車,當使用Get的時候就至關於把貨物放在了車頂上,過往的人都能看見,可是使用Post的時候,至關於把貨物放在了車箱中,過往的人是看不見的,因此會比較安全。雖然在Get的時候也能夠在車箱中放一點貨物,可是這很差,在Post的時候在車頂放一些貨物會以爲有毛病,車箱內能夠放爲何要放在車頂?另外Get的請求若是超出瀏覽器限制的範圍就至關於超載了,警察叔叔會把你的車扣住,你要是不卸一些貨你是不能走的,這就意味着請求不會被提交了,可是這貨物很珍貴不能卸,因此就死循環沒辦法走了。

 

 

接着,

對於Get請求來講,會產生一個數據包進行發送,可是Post會產生兩個TCP數據包;

Get請求中,瀏覽器會把http header和data一塊兒發送出去,服務器響應200返回數據便可;

Post請求中,首先要發送header過去打招呼說你好,我要給你發送數據了,而後服務器收到也打招呼,返回100給瀏覽器說好的,而後瀏覽器再將data發送過去,服務器收到之後作出響應返回200;

由於Post分爲兩步進行數據發送,時間上會比Get長一點,因此Get可能會比Post更有效,可是在網速環境十分優良的狀況下,這個區別其實不大,可是在網絡較差的狀況下,這個區別就會很明顯。

 

最後,

並非全部的Post請求都發送兩次包,Firefox就只發一次。。。

 

嗯,都是不一樣瀏覽器廠商惹的禍,坑着咱們這些開發者。

相關文章
相關標籤/搜索