2014-01-09 52 views
0

我一般按照HTTP GET和HTTP POST之間的選擇作爲ASP.NET MVC中的控制器上允許的操作方法。在創建MVC動作時選擇安全和不安全的HTTP方法

當服務器端沒有變化,又名我想檢索資源時,允許HTTP GET。

當用戶要提交一些將要保存的數據時,需要HTTP POST。

現在,這裏是問題與灰色地帶:

如果什麼用戶想下載一個文件?

通常我會將其設置爲HTTP GET(由於安全原因,文件存儲在數據庫中),因爲服務器上沒有更改。

如果我想記錄該文件X被用戶Y下載了怎麼辦?

當新日誌被創建時,現在有服務器端更改。這是一個足夠好的理由將HTTP方法從GET更改爲POST?

+0

下載之前用戶是否已登錄到網站? – hunter

+0

是的,但它確實沒有太大區別。下載文件的 –

+0

應該是GET – hunter

回答

0

我已經找到了如何處理這個確切的解釋:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

的安全方法定義:

9.1.1安全的方法

實現者應該知道該軟件代表用戶在 之間通過互聯網進行的交互,並且應該小心允許 用戶要意識到他們可能採取的任何可能對自己或他人意想不到的意義的行爲。

特別是,慣例已經確定,GET和 HEAD方法不應該具有采取檢索以外的動作 的意義。這些方法應該被認爲是「安全的」。 這允許用戶代理以一種特殊的方式表示其他方法,例如POST,PUT 和DELETE,以便使用戶意識到正在請求可能不安全的操作的事實。

當然,不可能確保服務器不會因爲執行GET請求而產生副作用;實際上,有些動態資源認爲這是一個功能。這裏重要的區別是用戶沒有請求副作用,因此 因此不能爲他們負責。

重要組成部分,下面所強調的,這給解決我的問題:

當然,這是不可能的,以確保服務器不會 產生副作用爲執行GET的結果請求;實際上,有些動態資源認爲這是一個功能。這裏重要的區別是用戶沒有請求副作用,因此 因此不能爲他們負責。

因此,由於用戶沒有請求執行日誌記錄,所以它被認爲是副作用,因此我可以繼續將GET設置爲用於文件下載的HTTP方法。