我制作了两个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通道发送。

09-05 20:34