瞭解歷史
get和post是HTTP與服務器交互的方式,
說到方式,其實總共有四種:put,delete,post,get。
他們的作用分別是對服務器資源的增,刪,改,查。
所以,get是獲取數據,post是修改數據。但是,現在大家都不這麼幹了!
只用一個方式就可以做增刪查減的操作。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。區別分析
get把請求的數據放在url上,即HTTP協議頭上,其格式爲:
以?分割URL和傳輸數據,參數之間以&相連。
數據如果是英文字母/數字,原樣發送,
如果是空格,轉換爲+,
如果是中文/其他字符,則直接把字符串用BASE64加密,及“%”加上“字符串的16進制ASCII碼”。
post把數據放在HTTP的包體內(requrest body)。get提交的數據最大是2k(原則上url長度無限制,那麼get提交的數據也沒有限制咯?限制實際上取決於瀏覽器,(大多數)瀏覽器通常都會限制url長度在2K個字節,即使(大多數)服務器最多處理64K大小的url。也沒有卵用。)。
post理論上沒有限制。實際上IIS4中最大量爲80KB,IIS5中爲100KB。GET產生一個TCP數據包,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
POST產生兩個TCP數據包,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。GET在瀏覽器回退時是無害的,POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
GET請求只能進行url編碼,而POST支持多種編碼方式。
GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
GET只接受ASCII字符的參數的數據類型,而POST沒有限制
那麼,post那麼好爲什麼還用get?get效率高!。
Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操作。到這裏,大家應該有個大概的瞭解了,GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。
1,http中,GET用於信息獲取,而且是安全的和冪等的。
(1).所謂安全的意味着該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。就是說,它僅僅是獲取資源信息,就像數據庫查詢一樣,不會修改,增加數據,不會影響資源的狀態。
* 注意:這裏安全的含義僅僅是指是非修改信息。
(2).冪等的意味着對同一URL的多個請求應該返回同樣的結果。
2,http中,POST是用於修改服務器上的資源的請求。
說完原理性的問題,我們從表面上來看看GET和POST的區別:
1. get是從服務器上獲取數據,post是向服務器傳送數據。
get 和 post只是一種傳遞數據的方式,get也可以把數據傳到服務器,他們的本質都是發送請求和接收結果。只是組織格式和數據量上面有差別,http協議裏面有介紹
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
因爲get設計成傳輸小數據,而且最好是不修改服務器的數據,所以瀏覽器一般都在地址欄裏面可以看到,但post一般都用來傳遞大數據,或比較隱私的數據,所以在地址欄看不到,能不能看到不是協議規定,是瀏覽器規定的。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
沒明白,怎麼獲得變量和你的服務器有關,和get或post無關,服務器都對這些請求做了封裝
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認爲不受限制。但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。
post基本沒有限制,我想大家都上傳過文件,都是用post方式的。只不過要修改form裏面的那個type參數
5. get安全性非常低,post安全性較高。
如果沒有加密,他們安全級別都是一樣的,隨便一個監聽器都可以把所有的數據監聽到。