本文主要對GET與POST基本區別進行彙總並掌握,若有錯誤與遺漏之處,請指出。html
HTTP(即超文本傳輸協議)是現代網絡中最多見和經常使用的協議之一,
設計它的目的是保證客戶機和服務器之間的通訊。
HTTP 的工做方式是客戶端與服務器之間的 「請求-響應」 協議。
客戶端能夠是 Web 瀏覽器,服務器端能夠是計算機上的某些網絡應用程序。
一般狀況下,由瀏覽器向服務器發起 HTTP 請求,服務器向瀏覽器返回響應。
響應包含了請求的狀態信息以及可能被請求的內容。segmentfault
HTTP方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT瀏覽器
其中兩種常見的 HTTP 請求就是:GET 和 POST。
區別: _GET_是從服務器上獲取數據,_POST_則是向指定的資源提交要被處理的數據緩存
請求報文的格式:
< request line >
< headers >
< blank line >
< request-body >安全
GET請求數據按照查詢字符串(名稱/值對)方式,放置在HTTP請求協議頭(headers)中,也就是URL以後;服務器
而POST提交的數據則放在實體的主體(request-body)中。restful
_4.1 緩存:_ GET會被緩存,POST不能。網絡
_4.2 書籤:_ GET可收藏爲書籤,POST不可收藏爲書籤併發
_4.3 歷史記錄:_ GET請求的URL,參數會被瀏覽器保留在歷史中,POST參數不會。大數據
_4.4 默認請求:_ 在from提交的時候,若是不指定Method,則默認爲get請求。
GET請求是能夠被客戶端緩存的。會比POST高效。
AJAX環境中GET響應快速,POST須要先發送HTTP頭部(headers) 再發送報文實體的主體(request-body)中的數據。
6.1 GET限制數據集的值必須爲ASCII字符;
GET提交的數據將會附加在url以後,以?分開與url分開。
1.以 ? 來分隔URL和數據;
2.以& 來分隔參數;
3.若是數據是英文或數字,原樣發送;
4.若是數據是中文或其它字符,則進行BASE64編碼
5.GET將數據的按照variable=value的形式,添加到URL後面;
如:http:// www.abc.com/?username=yt&id=123
6.2 POST沒有限制,容許二進制數據。
POST是將數據放在請求的數據體(request-body)中,按照查詢字符串(名稱/值對)相對應的方式,傳遞到所指向URL;
7.1.GET方式提交的數據最多隻能是1024字節,POST支持較大數據傳輸
7.2HTTP協議對GET和POST都沒有對長度的限制
RFC 2616 中明確對 uri 的長度並無限制。
不過雖然在RFC中並無對uri的長度進行限制,可是各大瀏覽器廠家實現上限制了URL的長度。
IE對URL長度的限制是2083字節(2K+35)
瀏覽器:聽說早期的瀏覽器會對URL長度作限制。IE對URL長度會限制在2083個字符內,Chrome會崩潰。 服務器:URL長了,對服務器處理也是一種負擔。 本來一個會話就沒有多少數據,如今若是有人惡意地構造幾個幾M大小的URL, 並不停地訪問你的服務器。服務器的最大併發數顯然會降低。 另外一種攻擊方式是:把告訴服務器Content-Length是一個很大的數, 而後只給服務器發一點兒數據,嘿嘿,服務器你就傻等着去吧。 哪怕你有超時設置,這種故意的次次訪問超時也能讓服務器吃不了兜着走。 有鑑於此,多數服務器出於安全啦、穩定啦方面的考慮,會給URL長度加限制。 可是這個限制是針對全部HTTP請求的,與GET、POST沒有關係。
GET所發送的數據是 URL 的一部分,
有時候會直接反應在瀏覽器的地址欄,
如今的瀏覽器大多會記住曾經輸入過的URL(在發送密碼或敏感信息時毫不要使用 GET !)。
試想若是你曾經在別人電腦上填過一個很私密的表單,那麼你的這份記錄極可能被連沒什麼電腦常識的人都一覽無遺。
可是被抓包以後的POST請求和GET請求是同樣裸露的,因此這裏是相對的。
說 POST 比 GET 安全 也不徹底對的。
根據HTTP規範,POST表示可能修改變服務器上的資源的請求。
在語義上(restful視角):
GET的是獲取指定URL上的資源,是讀操做。
重要的一點是不論對某個資源GET多少次,它的狀態是不會改變的,
在這個意義上,咱們說GET是安全的(不是被密碼學或者數據保護意義上的安全)。
由於GET是安全的,因此GET返回的內容能夠被瀏覽器,Cache服務器緩存起來。
POST的語義是修改變服務器上的資源的請求,因此是不安全的,
每次提交的POST,代碼都會認爲這個操做會修改資源的狀態,
因而,瀏覽器在你按下F5的時候會跳出確認框,緩存服務器不會緩存POST請求返回內容。
參考:
GET請求和POST請求的區別
再也不以訛傳訛,GET和POST的真正區別
淺談HTTP中Get與Post的區別
HTTP請求Get和Post的區別總結