您的位置:首页 > 运维架构

servlet中doget和dopost方法的区别

2016-09-02 09:26 615 查看
作者:chainho

链接:http://www.zhihu.com/question/20144588/answer/80058973

来源:知乎

也就是说GET方法不应该被用来做能引起服务端副作用的操作。POST主要用于创建或者更新资源信息

此外,关于GET方法还有一个称呼是幂等(idempotent)方法。

而所谓idempotent,是指无论操作多少次,结果都是一样的。而POST方法,自然不是幂等的,因为他每次都向服务端提交数据,这也是要特别注意表单重复提交的问题。

但开发中,GET方法却为开发人员大量的不分情况的使用。像提交数据,获取信息,删除等等操作。

而大部分应用服务器和Web Server的实现中,都会提供记录accesslog的机制。

这个accesslog会记一些什么呢?下面是tomcat中的GET方法的一条访问记录,我们发现请求中附加的参数也一同被编码记录了下来。

[07/Jan/2016:11:40:50 +0800] "GET /test/servlet?abc=%E4%BD%A0%E5%A5%BD HTTP/1.1" 200 117

而POST方法,log记录下来的只有请求路径而已。

[07/Jan/2016:11:09:11 +0800] "POST /test/servlet HTTP/1.1" 200 127

而这些访问日志在应用中又有可能会提供给第三方的app做统计分析使用,试想,如果如果提交的数据中包含用户名、密码之类的关键信息,那两种方式一对比,就知道该用啥了。

3 对比

GET 请求的一些特点:

GET 请求会有 cache

GET 请求会保留在浏览历史中

GET 请求可以保存到书签

GET 请求不应用于处理敏感数据

GET 请求有长度限制

GET 请求应该只用于获取数据

POST 请求的一些特点:

POST 不会有cache

POST 请求不会出现在浏览器的浏览历史中

POST 请求不能保存到书签

POST 也是有长度限制的(不同的Web Server可能实现不同)

GET方式采用URL跳转的方式来请求

POST采用表单提交方式来请求

区别:GET请求的网页参数都是直接通过URL来携带,POST可以压入HTTP协议中的param中传递

get方式会把请求参数拼接到请求路径上,并且有长度限制。post方式把请求参数显示到请求体中,没有长度限制。

其实,POST也是有长度限制的,不是一般说的POST不限制,默认是2097152;而GET参数个数也是有限制的,默认是10000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: