【问题标题】:How to handle HTTPS get request from browser using Socket's inputstream如何使用 Socket 的输入流处理来自浏览器的 HTTPS 获取请求
【发布时间】:2015-10-16 14:04:08
【问题描述】:

我正在编写一个简单的 HTTP 代理服务器。我可以处理来自浏览器的 HTTP GET 请求。但是,我在处理 HTTPS GET 请求时遇到了问题。 我有一个用于解析 HTTP GET 请求的解析器​​,并且我知道 HTTP GET 请求的样子:

GET /Path HTTP/1.1 (\r\n)

标题(键:值)(\r\n)

....

(\r\n\r\n)

但我不知道 HTTPS GET 是什么样子,以及如何解析它。 当从浏览器触发 HTTPS 请求时,我的代理收到奇怪的字符。我确信这是因为加密。但是如何仅使用 Java 的 Socket 类来处理来自浏览器的安全请求

try ( BufferedReader inputStream = 
          new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      OutputStream outputStream = socket.getOutputStream(); ) { 
   ....
}

【问题讨论】:

  • 加密是在表示层执行的,它高于您操作的传输层。

标签: java sockets https get


【解决方案1】:

对于HTTPS 连接,您所能做的就是转发您收到的数据。该数据已加密,只有目标服务器可以解密。

如果您也想阅读该请求,则需要说 SSL/TLS,这是底层协议。此外,您还需要一个证书,除非由 认证机构 签名并且对请求的域有效,否则将阻止浏览器显示内容,因为它们不信任该证书。

【讨论】:

  • 那么我怎样才能知道它是否是HTTPS,因为你知道如果它是加密的我无法解析inputStream,我的意思是在转发之前你应该知道它是简单的套接字还是安全的。如果是后者,我应该从工厂创建安全套接字,并获取请求的服务器证书,但不解析 inputStream 如何获取请求的服务器的主机名或 IP
  • @Humoyun基于端口,HTTP流量使用端口80和HTTPS443
  • 当然,:) 这么简单的解决方案,真可惜,我怎么想不出这个,无论如何,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2015-10-11
  • 2011-12-30
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多