我制作了两个J2EE应用程序,其中ProjectX中的一个servlet通过https协议执行sendRedirect到ProjectY的另一个servlet。
代码就像
response.sendRedirect("https://ip:8443/ProjectY/servletY?id=123");
在ProjectY中,
SerletY具有如下代码
PrintWriter pw = response.getWriter();
pw.print("Passed id is ID = " + request.getParameter("id"));
我的查询是,
由于使用https时,通过网络发送的数据在理想情况下是加密的,因此为什么我重定向到ServletY后能够看到浏览器的URL,
“ https://ip:8443/ProjectY/servletY?id=123”
我已经使用POST方法隐藏了该参数,但是我的问题是,它是在从ProjectX(位于http中)发送到ProjectY(即https调用)时实际上对数据进行加密吗?
感谢你的支持。!!!
最佳答案
发生了什么
没有涉及的POST
请求。
用户在浏览器中打开ProjectX的站点
由于您的HTTP 302
,它将以response.sendRedirect
响应进行响应。
用户的浏览器将采用响应的Location
并将其打开
因此,用户的浏览器建立了与ip:8443
的TLS连接
TLS通道打开后,它将发送GET /ProjectY/servletY?id=123 HTTP/1.1
ProjectY将通过安全的TLS通道进行响应。
观察结果
如果您在第1步中通过普通HTTP
调用ProjectX,则302
响应不会被加密,并且有权访问您的连接的每个人都可以看到id
。
用户的浏览器将始终看到id
,因为它需要遵循步骤3中的重定向。
用户将在地址栏中看到id
,因为浏览器将显示其新位置。
调用ProjectY时,id
受保护,因为它仅通过TLS通道发送。