Can';在Google Chrome中,我无法从我的Java服务器应用程序接收纯文本
我有一个用Java编写的小服务器应用程序,它向浏览器发送纯文本,如下所示: Server.javaCan';在Google Chrome中,我无法从我的Java服务器应用程序接收纯文本,java,google-chrome,Java,Google Chrome,我有一个用Java编写的小服务器应用程序,它向浏览器发送纯文本,如下所示: Server.java import java.io.IOException; public class Server { private int portNumber; public Server(int portNumber) { this.portNumber = portNumber; } public void start() { //Thread pool final Execu
import java.io.IOException;
public class Server {
private int portNumber;
public Server(int portNumber) {
this.portNumber = portNumber;
}
public void start() {
//Thread pool
final ExecutorService threadPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(portNumber);
while(true) {
Socket clientSocket = ss.accept();
threadPool.submit(new ClientTask(clientSocket));
}
} catch(IOException e) {
e.printStackTrace();
}
}
};
Thread clientThread = new Thread(serverTask);
clientThread.start();
}
}
ClientTask.java
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class ClientTask implements Runnable{
private final Socket clientSocket;
public ClientTask(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
System.out.println("Got a client...");
try (BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
DataOutputStream os = new DataOutputStream(clientSocket.getOutputStream());){
os.writeBytes("HTTP/1.1 200 OK\r\n");
os.writeBytes("Content-Type: text/plain");
os.writeBytes("\r\n");
os.writeBytes("\r\n");
os.writeBytes("hello");
os.writeBytes("\r\n");
os.flush();
System.out.println("About to close..");
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
clientSocket.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Server server = new Server(1111);
server.start();
}
}
Main.java
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class ClientTask implements Runnable{
private final Socket clientSocket;
public ClientTask(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
System.out.println("Got a client...");
try (BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
DataOutputStream os = new DataOutputStream(clientSocket.getOutputStream());){
os.writeBytes("HTTP/1.1 200 OK\r\n");
os.writeBytes("Content-Type: text/plain");
os.writeBytes("\r\n");
os.writeBytes("\r\n");
os.writeBytes("hello");
os.writeBytes("\r\n");
os.flush();
System.out.println("About to close..");
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
clientSocket.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Server server = new Server(1111);
server.start();
}
}
我的服务器在端口1111上运行,当我键入http://localhost:1111
在Safari中,它工作得非常好(我在浏览器中看到“hello”),但在Chrome中则不行。Chrome的情况如何 编辑:控制台网络选项卡的屏幕截图
Chrome可能会从http://重定向到https://
要防止此行为,请转到chrome://net-internals/#hsts,在Delete domain security Policys(删除域安全策略)下输入localhost,然后按Delete(删除)按钮。您在
DataOutputStream
中发送的输出是错误的,基本上Chrome会接受有效的HTTP响应来接收
这是您的客户端更新(我将让您优化代码)
在铬合金上测试,并通过端子使用curl
:
curl -v localhost:1111
* Rebuilt URL to: localhost:1111/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 1111 (#0)
> GET / HTTP/1.1
> Host: localhost:1111
> User-Agent: curl/7.54.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Sat, 24 Mar 2018 11:27:15 GMT
< Server: Java Server/12234
< Content-Type: text/plain
< Content-Length: 5
< Expires: Sat, 24 Mar 2018 11:27:15 GMT
< Last-modified: Sat, 24 Mar 2018 11:27:15 GMT
<
* Closing connection 0
Hello%
curl-v localhost:1111
*重建的URL到:localhost:1111/
*正在尝试::1。。。
*TCP_节点集
*已连接到本地主机(::1)端口1111(#0)
>GET/HTTP/1.1
>主机:localhost:1111
>用户代理:curl/7.54.0
>接受:*/*
>
*HTTP 1.0,假设在正文之后关闭
您的请求在chrome开发者控制台中是什么样子的?你能用“网络”选项卡截图吗?@sfat我已经编辑了我的问题,你是在代理网络后面吗?在safari之外的其他浏览器上,它还能工作吗?另外,你可能想在chrome中尝试匿名模式
,可能会出现某种缓存问题。我也在Firerox和匿名模式下尝试过,但没有成功。请发布您的js
代码(如果有)和您请求的完整服务器端方法