“如果没有重新发送信息,则无法使用http post方法刷新页面,但不能获取原因?

时间:2013-04-23 19:33:20

标签: servlets

当我在post方法中转发请求时,会出现确认提醒  带有消息“如果不重新发送信息,则无法刷新页面”。  但是,当从get方法完成转发时,不会出现此警告框。

是什么原因?  请帮忙。

2 个答案:

答案 0 :(得分:0)

因为HTTP规范中的POST适用于非幂等的请求,因为它们修改服务器上的状态(例如,通过向类别添加新产品),如果请求已重新提交(例如,它会在类别中创建新产品)。

另一方面,GET适用于幂等的请求。例如,谷歌搜索是幂等的。对同一事物进行两次搜索不会修改服务器上的任何内容,并且重新提交相同的请求不会产生任何不良影响。

浏览器希望Web应用程序遵守此约定,从而在重新提交POST请求之前警告用户这种不必要的副作用。

通常的做法是遵循post-redirect-get模式让用户在没有这个恼人的弹出窗口的帖子后刷新,并且没有不必要的副作用。

答案 1 :(得分:0)

因为GET请求在网址中包含了这些参数(例如,网址以<{1}}结尾)。 GET请求通常不涉及敏感数据或更改服务器状态的操作。从URL中,您知道您要发送的内容。

使用POST,参数是“隐藏的”,在后台作为HTTP请求的一部分提交,您无法通过查看URL来查看它们。这些参数导致服务器改变状态,如果相同的数据被传输两次(例如,你不小心从网上商店购买了两次),它可能会导致问题。如果您没有意识到要重新发送,浏览器会告诉您。