HTTP - GET和POST的區別

網上有不少文章介紹這兩種HTTP請求的區別,我也不懂,主要仍是看了一些文章,在這裏寫下一些筆記。nginx


  1. 語義不一樣
    在HTTP協議中,最初規定GET是用來查詢或者獲取資料,只讀,POST用於修改數據,可寫。所以能夠看到兩種方式的使用場景上就有很大的區別,在RESTful中更是強調了這兩種HTTP請求方式目的。規定是死的,人是活的,因此不少人爲了方便GET也用於修改數據,好比刪除某個記錄,這樣很容易被CSRF,題外話。
  2. 發送數據
    HTTP協議中,GET和POST均可以先服務器發送數據,GET的提交的數據只能在URL中表示,而URL只容許部分可見字符,其餘字符都須要轉換%xx的形式;POST提交的數據能夠在URL中,也能夠在BODY裏,在BODY裏面的數據能夠是URLEncoded的普通數據,一樣是能夠是直接的二進制流數據,這樣能夠剩下很多流量。一個字節變成%xx,長度就是原來的三倍了。
  3. 長度限制
    在HTTP協議中,GET和POST提交的數據長度是沒有限制的。可是通常的瀏覽器和服務器軟件都會限制URL的長度,由於通常服務器會把URL當成字符串來進行使用,一個超長的字符串確定會影響到服務器的性能。而POST提交數據雖然會比GET的數據大不少,可是通常服務器仍是會限制其大小,在nginx中,有一個配置項爲client_max_body_size就是來設置POST的body數據大小的,有興趣的朋友能夠試一下。
  4. 安全性
    安全性和這兩種方式沒有任何關係。數據在HTTP上面走,確定會被別人嗅探到,關鍵仍是看你對數據的加密程度和算法了。上面說道了GET進行一些寫操做容易被csrf,其實只要在GET請求中帶上一些防護csrf的措施,那就不會被CSRF攻擊了。反之若是使用的是POST方式,可是沒有部署anti-CSRF方案的話,一樣會被csrf攻擊的。

好了,個人筆記寫完了,有興趣的朋友能夠拍磚。哈哈,交流學習下。算法

相關文章
相關標籤/搜索