解决https请求下发送http请求问题
2015-11-05 11:25
525 查看
在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);
本文转载自http://blog.csdn.net/songgeabc/article/details/18192057
为什么呢?原因是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);
本文转载自http://blog.csdn.net/songgeabc/article/details/18192057
相关文章推荐
- 关于网络学习的若干问题 --- 子网划分,子网掩码,主机地址等划分方法
- http-301 302 303 307
- 网络虚拟化技术(一): Linux网络虚拟化
- Barcode Reader SDK使用教程:网络摄像机读取条码
- win32 http 封装
- ios中获取手机的网络状态和运营商名称
- Http请求分析
- Android Studio使用HttpClient相关类库
- Android Volley网络通信框架
- 【网络流】最大流:点带需求的流通、边带下界的流通
- iOS9 怎么使用 Http 网络请求
- HillStone 做多NAT 使用不同的网络带宽出口
- C++ 用libcurl库进行http通讯网络编程
- 自己动手检查网络—ping[DOS]
- iOS9 HTTP 不能正常使用的解决办法
- 按钮添加网络请求的图片(多线程)(ios自学笔记)
- DefaultHttpClient使用
- 【网络流】最大流:求最小割值、求(边)不交路径数量、求二分匹配最大匹配数
- 显示网络上的图片
- 检查网络状态信息的API