0

我正在开发一个 Web 应用程序,需要通过 HTTP 重定向传递数据。例如:

http://foo.com/form.html 

发布到

http://foo.com/form/submit.html

如果数据存在问题,则将响应重定向回

http://foo.com/form.html?error=Some+error+message

并且查询参数“error”的值显示在页面上。

是否有任何其他可靠的方法可以通过重定向(即 HTTP 标头等)传递数据。

将数据作为查询参数传递是可行的,但并不理想,因为:

  • 它的明文(在查询字符串中,所以 SSL 不能依赖于 encyrpt)所以我不想传递敏感数据
  • URI 的长度受到浏览器的限制(尽管长度通常相当长)。

重要提示:此平台是无状态的,并且分布在许多应用服务器上,因此我无法跟踪服务器端会话对象中的数据。

4

3 回答 3

1

我认为根据数据量使用 cookie 将是一个合理的解决方案。因为您无法在服务器端跟踪它(例如,通过使用会话,这会更简单)

于 2012-05-04T20:37:18.760 回答
1

您可以将错误消息存储在服务器上的数据库中并通过 id 引用它:

http://foo.com/form.html?error_id=42

如果错误文本得到修复,您甚至不需要使用数据库。

此外,您可以使用Web Storage。您可以使用以下 JavaScript 显示输出页面,而不是使用“位置”标头进行重定向:

var error_message = "Something is wrong";
if( typeof(Storage) !== "undefined" ) {
  localStorage.error_message = error_message;
else {
  // fallback for IE < 8
  alert(error_message);
}
location.href = "new url";

重定向后,您可以localStorage.error_message使用 JavaScript 阅读并显示消息。

于 2012-05-04T20:38:10.550 回答
1

从客户端-服务器交互的角度来看,这是一个服务器内部调度问题。

浏览器并不意味着根据HTTP 规范自动重新发布初始请求的实体:“当且仅当第二个请求中使用的方法是GET或HEAD。

如果还不是这样,请使其成为form.html动态文件,使其成为 HTML 静态文件。将POST请求发送给自己并在出现错误时预先填写值。或者,您可以submit.html使用相同的模板,就form.html好像有问题一样。

它的明文(在查询字符串中,所以 SSL 不能依赖于 encyrpt)所以我不想传递敏感数据

我不确定这里有什么问题。无论如何,您都是通过纯 HTTP 提交所有内容。Cookie、查询参数和请求实体都将可见。使用HTTPS 实际上会保护所有这些,尽管查询参数仍然可能是浏览器历史记录和服务器日志的问题(这不是连接的一部分,这是 TLS 保护的)。

于 2012-05-04T20:42:18.370 回答