經常聽到有人這樣說,Post比Get更安全,似乎這種想法充滿了整個網絡,帶給人根深蒂固的影響,但是Post真的比Get更安全么?
Http請求方式
Http請求發送方式常用的就是以下兩種:
① Get機制
② Post機制
Get機制
Get機制的限制,比如最大1024字節,這個略去不表,Get最大的特點是提交時將參數通過url來發送。
Post機制
Post機制,實際是將數據http的數據部分,只不過不在url里面顯示罷了。
請求舉例
Get機制
例如:請求這個url: http://topic.csdn.net/u/20121016/08/2f7960fd-31bd-44ee-bec5-ed297af60039.html?seed=996321166&r=79901963
可以看出這是明顯的get方式,有參數,通過chome瀏覽器得到
從url里面就可以得到數值,但是如果是底層的調用,比如ajax請求,就不會在瀏覽器的地址欄中有顯示,比如下面的請求:

Post機制
比如:博客園的登錄請求:
http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2f
通過瀏覽器得到:
可以看到,這是post請求,並且地址欄里是沒有參數信息,更沒有密碼等等信息,但是往下看,沒錯,Post請求一樣,是將內容以明文的方式在傳輸,以下通過wireshark截包來看:
數據包的發送,如下:

上圖藍色部分是Post的數據部分,post其實只是將數據寫到了http尾部,如此而已。所以此處從安全上來講,與不顯示的后端ajax的Get請求,其實在安全性上是一樣的。所以post更安全么,不見得,因為post的設計之初,本來就不是為了安全而來的。
擴展一下
Ajax跨域
不讓ajax跨域,這樣就來得合理了,因為如果允許跨域,那只需要寫幾行js代碼,這樣就會造成重要信息(比如密碼)的泄漏。
Tcp連接個數
現代的瀏覽器,為了加快下載(加載)速度,已經將RFC文檔里面的”should be at most 2 connections”中的should理解的出神入化,因為RFC里面僅僅是should而不是must,所以現代的瀏覽器同時允許建立的tcp連接一般是超過2個tcp連接的。
Tcp協議
就像上篇TCP連接檢測里面提到的那樣,“tcp只是數據的發送與接收,包括握手,斷開以及rst,time_wait,close_wait 等等。“,Http同樣如果,知道協議,其實自己寫一個簡單的IIS真不費力。
最后
前面提到,TCP的連接個數,說到這里突然想到了一個問題,同時也再深入的擴展一下,為什么一台機器connect同一個IP,port的tcp連接數不能超過65535(當然實際65535也是達不到的)個呢?
答案請看這里《tcp的65535個連接之迷》
