使用application / excel MIME类型发布/重定向/获取HTTP响应的模式

时间:2011-11-16 13:33:51

标签: redirect refresh http-post httpresponse

我想将一些数据发布到服务器,作为回应,我想创建一个CSV文件,其中application/excel作为MIME类型(最近被识别为Internet媒体类型),以强制浏览器打开Microsoft Excel中生成的CSV文件。但是,我还希望防止用户因刷新页面而意外重新提交相同的信息(重新发布表单)。

使用简单的CRUD操作,我使用Post/Redirect/Get模式,这样任何进一步刷新都只会向服务器发送HTTP Get Request,而不会有任何参数,因此不会改变服务器的状态(Idempotence)。 / p>

当响应不是页面而是文件时,阻止用户将相同信息重新提交(重新发布)到服务器的公认模式是什么?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

发布/重定向/获取模式是浏览事件的答案。 在这里,没有浏览动作(表单提交只打开第三方应用程序,即excel),因此任何类型的浏览相关模式都将是无用的。

我建议你同时使用初始提交的服务器端跟踪(可能有一个唯一的令牌),这样就可以防止文件生成,以及一个易于编写的客户端脚本,如<form onsubmit="this.onsubmit = function(){ return false ; }">

答案 1 :(得分:1)

我可以为您提供另一种解决方案。

  • 获取您提交的数据的哈希值(MD5 / SHA256 ..)。 hash将[相当]独特。
  • 将其列入具有时间限制的会话中,例如5分钟。
  • 即使您的用户也提交相同的数据。哈希将是相同的,您可以向您的用户提供错误消息。

如果不同的用户可以发布相同的数据,您还可以在列表中保存用户信息。并根据用户提供错误信息。