MVC获得Vs Post

sat*_*esh 5 c# asp.net-mvc http-get

在阅读MVC概念时,我已经读过,在"GET"操作中使用代码来改变服务器对象的状态(数据库更新等)并不是一个好习惯.已经给出了"返回数据的缓存"作为原因.

有人可以解释一下吗?

提前致谢!

Sam*_*ham 7

这是通过HTTP标准.GET动词是一个应该是幂等和安全的动词.

9.1.1安全方法

实施者应该意识到软件代表用户在互联网上的交互,并且应该小心地让用户知道他们可能采取的任何可能对他们自己或他人有意想不到的意义的行为.

特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.

当然,不可能确保服务器不会因执行GET请求而产生副作用; 实际上,一些动态资源会考虑这个功能.这里的重要区别是用户没有请求副作用,因此不能对他们负责.

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


Joe*_*nos 5

浏览器可以缓存GET请求,通常是静态数据,如图像或脚本.但是你也可以允许浏览器使用[OutputCache]或以其他类似方式将GET请求缓存到控制器操作,因此如果为GET控制器操作启用了缓存,则可能单击导致的链接/Home/Index实际上不会运行该Index方法在服务器上,而是允许浏览器从其自己的缓存提供页面.

通过这种思路,您可以安全地打开GET操作上的缓存,其中您正在提供的数据不会更改(或不会经常更改),并且知道您的服务器操作不会每次都触发.

浏览器不会缓存POST,因此保证任何POST都可以进入服务器.

  • @StuartBranham它实际上都是(至少默认).打开OutputCache时,请查看缓存控件和相关标头,还可以查看网络选项卡的行为 - 如果启用了OutputCache,您将从缓存中加载没有请求的页面,或者304-Not Modified如果刷新,结果.没有OutputCache,每个请求总是命中服务器. (3认同)