0

当我从 post 方法中转发请求时,会出现一条确认警报,其中包含一条消息“如果不重新发送信息就无法刷新页面”。但是当通过 get 方法完成转发时,不会出现此警告框。

是什么原因 ?请帮忙。

4

2 回答 2

0

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

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

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

通常的做法是遵循post-redirect-get模式,让用户在发布后刷新,而不会出现这种烦人的弹出窗口,也不会产生不必要的副作用。

于 2013-04-23T20:21:11.580 回答
0

因为 GET 请求在 URL 中包含这些参数(例如 URL 以 结尾
?param1=foo&param2=bar)。GET 请求通常不涉及敏感数据或更改服务器状态的操作。从 URL 中,您知道要发送的内容。

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

于 2013-04-23T20:23:03.450 回答