標籤:http os 使用 資料 size 演算法 伺服器 res 學習
網上有很多文章介紹這兩種HTTP請求的區別,我也不懂,主要還是看了一些文章,在這裡寫下一些筆記。
- 語義不同
在HTTP協議中,最初規定GET是用來查詢或者擷取資料,唯讀,POST用於修改資料,可寫。因此可以看到兩種方式的使用情境上就有很大的區別,在RESTful中更是強調了這兩種HTTP請求方式目的。規定是死的,人是活的,所以很多人為了方便GET也用於修改資料,比如刪除某個記錄,這樣很容易被CSRF,題外話。
- 發送資料
HTTP協議中,GET和POST都可以先伺服器發送資料,GET的提交的資料只能在URL中表示,而URL只允許部分可見字元,其他字元都需要轉換%xx的形式;POST提交的資料可以在URL中,也可以在BODY裡,在BODY裡面的資料可以是URLEncoded的普通資料,同樣是可以是直接的二進位流資料,這樣可以剩下不少流量。一個位元組變成%xx,長度就是原來的三倍了。
- 長度限制
在HTTP協議中,GET和POST提交的資料長度是沒有限制的。但是一般的瀏覽器和伺服器軟體都會限制URL的長度,因為一般伺服器會把URL當成字串來進行使用,一個超長的字串肯定會影響到伺服器的效能。而POST提交資料雖然會比GET的資料大很多,但是一般伺服器還是會限制其大小,在nginx中,有一個配置項為client_max_body_size就是來設定POST的body資料大小的,有興趣的朋友可以試一下。
- 安全性
安全性和這兩種方式沒有任何關係。資料在HTTP上面走,肯定會被別人嗅探到,關鍵還是看你對資料的加密程度和演算法了。上面說道了GET進行一些寫操作容易被csrf,其實只要在GET請求中帶上一些防禦csrf的措施,那就不會被CSRF攻擊了。反之如果使用的是POST方式,但是沒有部署anti-CSRF方案的話,同樣會被csrf攻擊的。
好了,我的筆記寫完了,有興趣的朋友可以拍磚。哈哈,交流學習下。
HTTP - GET和POST的區別