3

我遇到了这样一种情况,即 iOS 6 上的 Safari(尚未测试早期版本)正在发送 POST 数据中的值,这些值在当前页面中不作为表单输入存在,但在以前的 POST 中发送到相同的 URL。

这是场景:

  1. 用户被发送到带有一些查询参数的登录页面的 URL,比方说/login?x=1,y=2
  2. 用户输入了不正确的凭据,再次显示登录页面xy作为隐藏输入嵌入到表单中。
  3. 用户点击 Safari 中的“返回”按钮,该按钮 GETs /loginx和的值y现在已丢失,并且不包含在隐藏表单输入中。
  4. 用户再次输入了错误的凭据,这就是奇怪的地方。通过的 POST 数据包含用户刚刚输入的用户名和密码,以及之前提交的x, 但不是的值y。在这个特定的 Web 应用程序中,x没有出现y对于这个特定的 POST 来说是一个无效状态并导致错误。

我已经验证 Safari 实际上是在执行 GET,而不是在步骤 3 中使用页面的缓存版本。

对于它的价值,我将 Cache-Control 响应标头设置为no-cache, no-store, must-revalidate

更新:我继续向 Apple 提交了一个错误,以确保他们知道这一点。如果我收到任何反馈,我会在这里发布。

4

0 回答 0