解决https请求(页面)下发送http请求问题

一朝忽觉京梦醒,半世浮沉雨打萍。---前段时间看的一篇关于一个梦想留在北京工作的女博士和他的导师之间的流氓爱情故事,分享一下。

本文借鉴自:http://www.dewen.org/q/5678/Tomcat+https%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0http%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%8E%B7%E5%8F%96%E9%97%AE%E9%A2%98+%7C+https%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0http+session%E5%A4%B1%E6%95%88%E9%97%AE%E9%A2%98

开始说正事:

问题:碰到这个问题朋友肯定已经了解了关于http和https的区别,并且也知道了在https页面下的“相对路径”表示的请求都会与页面的协议保持一致。如果想在https页面下发送http的请求,如果只把链接写死成为http的“静态路径”是不够的,那样会导致http的请求与总页面https的请求的session不一致,原因下边讲。

原因:原因是https的请求中服务器发回的cookie是标记为"secure"的,而http的请求时非"secure","由于在服务器端secure"的cookie不会兼容非"secure"的,所以当http的请求携带着同一jsessionid的cookie到达服务器时,服务器拒绝非"secure",进而返回的结果是一个新的非"secure"的cookie,于是两个session就不同了。

解决办法:由原因分析可知,两个session不同,更具体说是cookie的状态不同。那么办法是,在接收到第一个https请求的响应后 到 发送下面的http请求之前,将cookie去"secure"状态,但是又要保证jsessionid不变。具体操作可以新建一个cookie(新建的是非"secure"状态),然后赋予同一个jessionid,然后加入response中。


代码如下:

Cookie cookie = new Cookie("JSESSIONID", req.getSession().getId());
cookie.setPath(req.getContextPath());
resp.addCookie(cookie);

你可能感兴趣的:(解决https请求(页面)下发送http请求问题)