Java 跨HTTP重定向传递数据的选项
我正在开发一个Web应用程序,需要通过HTTP重定向传递数据。例如:Java 跨HTTP重定向传递数据的选项,java,http,response.redirect,post-redirect-get,http-redirect,Java,Http,Response.redirect,Post Redirect Get,Http Redirect,我正在开发一个Web应用程序,需要通过HTTP重定向传递数据。例如: http://foo.com/form.html 发布到 http://foo.com/form/submit.html 如果数据有问题,响应将重定向回 http://foo.com/form.html?error=Some+error+message 并在页面上显示查询参数“error”的值 是否有其他可靠的方法通过重定向(即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的长度受浏览器的限制(长度通常相当长)
重要提示:该平台无状态,分布在多个应用服务器上,因此我无法跟踪服务器端会话对象中的数据。我认为根据数据量,使用cookie将是一个合理的解决方案。由于您无法在服务器端跟踪它(例如,通过使用会话,这将更加简单)我认为根据数据量,使用cookie将是一个合理的解决方案。由于您无法在服务器端跟踪错误消息(例如,使用会话,这样会更简单)您可以将错误消息存储在服务器上的数据库中,并通过id对其进行引用:
http://foo.com/form.html?error_id=42
如果错误文本已修复,您甚至不需要使用数据库
此外,您还可以使用。您可以使用以下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";
var error\u message=“有问题”;
if(类型(存储)!=“未定义”){
localStorage.error\u message=错误消息;
否则{
//IE<8的回退
警报(错误信息);
}
location.href=“新建url”;
重定向后,您可以使用JavaScript读取
localStorage.error\u message
,并显示该消息。您可以将错误消息存储在服务器上的数据库中,并通过id对其进行引用:
http://foo.com/form.html?error_id=42
如果错误文本已修复,您甚至不需要使用数据库
此外,您可以使用以下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";
var error\u message=“有问题”;
if(类型(存储)!=“未定义”){
localStorage.error\u message=错误消息;
否则{
//IE<8的回退
警报(错误信息);
}
location.href=“新建url”;
重定向后,您可以使用JavaScript读取
localStorage.error\u消息并显示该消息。从客户机-服务器交互的角度来看,这是服务器内部调度问题
浏览器并不意味着根据以下内容自动重新发布初始请求的实体:“当且仅当第二个请求中使用的方法是GET或HEAD时,所需操作可由用户代理执行,而无需与用户交互。”
如果还没有,则将form.html
设置为动态,使其成为html静态文件。将POST
请求发送到自身,并在出现错误时预填充值。或者,如果出现问题,您可以使用与form.html
相同的模板
它的明文(和)在查询字符串中,因此不能依赖SSL
所以我不想传递敏感数据
我不确定问题出在哪里。您仍在通过纯HTTP提交所有内容。Cookie、查询参数和请求实体都将可见。使用,尽管查询参数可能仍然是浏览器历史记录和服务器日志的问题(这不是连接的一部分,这是TLS保护的).从客户机-服务器交互的角度来看,这是一个服务器内部调度问题
浏览器并不意味着根据以下内容自动重新发布初始请求的实体:“当且仅当第二个请求中使用的方法是GET或HEAD时,所需操作可由用户代理执行,而无需与用户交互。”
如果还没有,则将form.html
设置为动态,使其成为html静态文件。将POST
请求发送到自身,并在出现错误时预填充值。或者,如果出现问题,您可以使用与form.html
相同的模板
它的明文(和)在查询字符串中,因此不能依赖SSL
所以我不想传递敏感数据
我不确定问题出在哪里。您仍在通过纯HTTP提交所有内容。Cookie、查询参数和请求实体都将可见。使用,尽管查询参数可能仍然是浏览器历史记录和服务器日志的问题(这不是连接的一部分,这是TLS保护的).Cookie也是不安全的。它们以纯文本形式传递。同意,我没有注意到这一点。但我认为没有任何方法可以安全地将数据传递到客户端,除非您使用encription。可能会将信息存储在用户会话(或上述数据库)中这将是一个更好的解决方案。cookie值可以加密,因此只能使用纯base64文本passed@ArneBurmeisterbase64本身是编码而不是加密。当然,它可能是加密内容的base64编码。Cookie可以通过HTTPS进行安全保护,因为它们是通过HTTP请求头传递的。我在发布并查看之后想到了这一点一种基于Cookie的机制——尽管大多数Cookie的站点限制也为4KB——在现实世界中,这对于非常大的表单来说应该足够了。Cookie也是不安全的。它们以纯文本形式传递。同意,我没有注意到这一点。但我认为没有任何方法可以安全地将数据传递到客户端,除非您使用encrip也许在用户会话(或上面提到的数据库)中存储信息会是一个更好的解决方案