經(jīng)常聽到有人這樣說,Post比Get更安全,似乎這種想法充滿了整個網(wǎng)絡,帶給人根深蒂固的影響,但是Post真的比Get更安全么? Http請求方式 Http請求發(fā)送方式常用的就是以下兩種: ① Get機制 ② Post機制 Get機制 Get機制的限制,比如最大1024字節(jié),這個略去不表,Get最大的特點是提交時將參數(shù)通過url來發(fā)送。 Post機制 Post機制,實際是將數(shù)據(jù)http的數(shù)據(jù)部分,只不過不在url里面顯示罷了。 請求舉例 Get機制 例如:請求這個url: http://topic.csdn.net/u/20121016/08/2f7960fd-31bd-44ee-bec5-ed297af60039.html?seed=996321166&r=79901963 可以看出這是明顯的get方式,有參數(shù),通過chome瀏覽器得到 從url里面就可以得到數(shù)值,但是如果是底層的調(diào)用,比如ajax請求,就不會在瀏覽器的地址欄中有顯示,比如下面的請求: Post機制 比如:博客園的登錄請求: http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2f 通過瀏覽器得到:
可以看到,這是post請求,并且地址欄里是沒有參數(shù)信息,更沒有密碼等等信息,但是往下看,沒錯,Post請求一樣,是將內(nèi)容以明文的方式在傳輸,以下通過wireshark截包來看:
數(shù)據(jù)包的發(fā)送,如下: 上圖藍色部分是Post的數(shù)據(jù)部分,post其實只是將數(shù)據(jù)寫到了http尾部,如此而已。所以此處從安全上來講,與不顯示的后端ajax的Get請求,其實在安全性上是一樣的。所以post更安全么,不見得,因為post的設計之初,本來就不是為了安全而來的。 擴展一下 Ajax跨域 不讓ajax跨域,這樣就來得合理了,因為如果允許跨域,那只需要寫幾行js代碼,這樣就會造成重要信息(比如密碼)的泄漏。 Tcp連接個數(shù) 現(xiàn)代的瀏覽器,為了加快下載(加載)速度,已經(jīng)將RFC文檔里面的”should be at most 2 connections”中的should理解的出神入化,因為RFC里面僅僅是should而不是must,所以現(xiàn)代的瀏覽器同時允許建立的tcp連接一般是超過2個tcp連接的。 Tcp協(xié)議 就像上篇TCP連接檢測里面提到的那樣,“tcp只是數(shù)據(jù)的發(fā)送與接收,包括握手,斷開以及rst,time_wait,close_wait 等等。“,Http同樣如果,知道協(xié)議,其實自己寫一個簡單的IIS真不費力。 最后 前面提到,TCP的連接個數(shù),說到這里突然想到了一個問題,同時也再深入的擴展一下,為什么一臺機器connect同一個IP,port的tcp連接數(shù)不能超過65535(當然實際65535也是達不到的)個呢?
答案請看這里《tcp的65535個連接之迷》
|
|