我在macos上将https安全网页代理打开,并设置地址为127.0.0.1端口号为8091,我使用nodejs的http.createServer创建服务并监听8091端口后,在https网页中进行访问,网页报错ERR_EMPTY_RESPONSE,nodejs中没有接受任何信息。但是我使用java ServerSocket serverSocket = new ServerSocket(8091); 后java可以监听到https的请求。这个是为什么?
以下是我的代理设置截图:
以下是我的nodejs代码:
const http = require('http');
// 创建一个HTTP服务器
const server = http.createServer((req, res) => {
// 设置响应头
res.writeHead(200, {'Content-Type': 'text/plain'});
console.log(req)
// 发送响应数据
res.end('Hello World\n');
});
var port = 8091
// 监听端口
server.listen(port, () => {
console.log(`Server running at ${port}`);
});
以下是我的java代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
public static void main(String[] args) throws IOException {
try {
// 创建ServerSocket对象并监听端口
ServerSocket serverSocket = new ServerSocket(8091);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
// 监听客户端请求
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
// 获取输入流,读取客户端发送的数据
InputStream inputStream = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
// 解析请求头
String header = "";
while ((line = reader.readLine()) != null) {
header += line + "\r\n";
if (line.isEmpty()) {
break;
}
}
System.out.println("请求头信息:\n" + header);
// 解析请求体
String body = "";
char[] buffer = new char[1024];
int length;
while ((length = reader.read(buffer)) != -1) {
body += new String(buffer, 0, length);
}
System.out.println("请求体信息:\n" + body);
// 关闭输入流和Socket
reader.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
目前我希望,我可以使用nodejs的方式,接受到https的通过代理转发过来的请求,以便后续的nodejs服务开发