这个问题是关于Java Servlets中一个语句的含义是什么。

3
我阅读了有关doGet方法的以下声明:
确保您编写的doHead方法既安全又幂等(即,保护自己免受为一个HTTP HEAD请求调用多次的影响)。
从编程角度来看,上述声明意味着什么以及需要注意什么?
我正在向后端服务器发起单个调用,并且后端的servlet正在重复调用自身。因此,我试图了解这是否与上述声明有关。
请帮助我理解。

那个语句来自哪里? - Jens Schauder
@JensSchauder: http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServlet.html - London guy
这可能会有所帮助 http://restcookbook.com/HTTP%20Methods/idempotency/ - Jijo Mathew
这个措辞非常不恰当。幂等性并不意味着“保护自身”,它是交易的一个属性,即可以无害地重复执行。 - user207421
3个回答

3

在覆盖 doget() 方法时,head() 会被自动覆盖。HEAD 请求是一种 GET 请求,其响应中不返回主体内容,只返回请求头字段。

确保编写的 doHead() 方法是安全的

GET 方法应该是安全的,也就是说,它没有任何副作用需要用户负责。例如,大多数表单查询都没有副作用。如果客户端请求旨在更改存储的数据,则应使用其他 HTTP 方法。

确保编写的 doHead() 方法是幂等的

GET 方法也应该是幂等的,这意味着可以安全地重复执行。有时使方法安全也会使它成为幂等的。例如,重复查询既是安全的又是幂等的,但在线购买产品或修改数据既不是安全的也不是幂等的。

JavaDoc 对此有清晰的解释:doget()

函数的幂等性:

幂等性是数学和计算机科学中某些操作的属性,它们可以多次应用而不会更改初始应用之外的结果。幂等意味着多次执行请求的效果与执行一次相同。幂等请求可能会在数据库中创建某些内容,但不会再次创建它。或者它只会在下一次返回对它的引用。


1
除非您通过servlet实现提供静态内容并希望利用浏览器缓存来改善客户端、网络和服务器性能,否则您不需要关心doHead方法!否则,您应该使用正确的HTTP标头(例如:Last-Modified等)提供一个空的响应主体。

0
"idempotent" 意味着该方法可以安全地重复执行,而不会产生任何副作用。因为客户端通常使用 head 方法来检测资源信息,例如存在性、长度、媒体类型、修改时间等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接