在HTTP GET和HTTP POST之间选择作为ASP.NET MVC中控制器操作的允许方法时,我通常会遵循这些建议。
如果服务器端没有变化,我想要检索资源,则允许HTTP GET。
当用户即将提交一些将被保留的数据时,需要HTTP POST。
现在出现了灰色区域的问题:
如果用户想下载文件怎么办?
通常我会将其设置为HTTP GET(由于安全原因,文件存储在数据库中),因为服务器上没有进行任何更改。
如果我想记录用户Y下载的文件X怎么办?
现在,在创建新日志时,服务器端会发生更改。这是否足以将HTTP方法从GET更改为POST?
答案 0 :(得分:0)
我找到了关于如何处理这个问题的确切解释:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
安全方法的定义:
9.1.1安全方法
实施者应该知道该软件代表用户 他们在互联网上的互动,应该小心允许 用户要知道他们可能采取的任何行动 对自己或他人意想不到的重要性。
特别是,已经建立了GET和GET的惯例 HEAD方法不应该具有采取行动的意义 除了检索。这些方法应该被认为是“安全的”。 这允许用户代理表示其他方法,例如POST,PUT 和DELETE,以一种特殊的方式,使用户了解 事实上,正在要求采取可能不安全的行动。
当然,无法确保服务器不能 由于执行GET请求而产生副作用;在 事实上,一些动态资源考虑了一个功能。重要的 区别在于用户没有请求副作用,所以 因此不能对他们负责。
下面强调了重要的部分,它解决了我的问题:
当然,无法确保服务器不能 由于执行GET请求而产生副作用;在 事实上,一些动态资源考虑了一个功能。重要的 区别在于用户没有请求副作用,所以 因此不能对他们负责。
因此,由于用户没有请求执行日志记录,因此它被认为是副作用,因此我可以继续将GET设置为用于文件下载的HTTP方法。