我开发了一个Java servlet,它可以代理来自浏览器的HTTP请求。 我遇到了代理HTTPS请求的问题 servlet似乎没有从浏览器接收任何HTTPS请求 在进一步研究之后,我注意到HTTP请求似乎以简单的GET请求开始,而HTTPS请求以CONNECT请求开始,如下面的日志提取所示:
"CONNECT ajax.googleapis.com:443 HTTP/1.1" 200
我的问题是,是否可以使用我的servlet处理此请求?
public class MyProxyServlet extends HttpServlet {
@Override
public void init(final ServletConfig config) throws ServletException {
super.init(config);
}
@Override
protected void doGet(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
}
@Override
protected void doPost(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
}
}
若在何处以及如何?
答案 0 :(得分:1)
由于默认HttpServlet
实现不处理CONNECT谓词,因此您必须覆盖servlet中Service
的{{1}}方法并处理javax.servlet.http.HttpServlet
方法自己。最初的实现似乎忽略了这个CONNECT
。看一下HttpServlet源代码http://www.docjar.com/html/api/javax/servlet/http/HttpServlet.java.html
答案 1 :(得分:0)
通常,HTTPS握手和交换由servlet容器和浏览器处理。对于servlet,它不需要知道模式是什么。您必须在服务器的配置中定义正确的连接器以侦听HTTPS,并且不需要在Web应用程序或servlet端进行任何额外的操作。无论是通过http://还是https://访问,servlet的请求都是相同的。仅需要将服务器配置为接受https://