0

我创建了简单的 Java 服务器,它使用 HTTP 协议通过端口 4567 接受连接并(至少现在)向浏览器发送硬编码响应:

public class Connection extends Thread {
    private boolean stop;
    private Socket socket;
    private BufferedWriter output;
    private BufferedReader input;

    public Connection(Socket socket) {
        try {
            this.socket = socket;
            output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (IOException ex) {
            System.out.println("Could not create input/output readers: " + ex);
        }
    }

    @Override
    public void run() {
        //while (!stop) {
            try {
                String data = "{'success': 'yes'}".replaceAll("'", "\"");
                String read;

                // printing request on screen; it's ignored
                while (!(read = input.readLine()).equals("")) {
                    System.out.println(read);
                }

                // Last empty line send by browser won't be printed 
                System.out.println();

                // Writing hardcoded response
                writeln("HTTP/1.1 200 OK");
                writeln("Content-Type: application/json; charset=utf-8");
                writeln("Content-Length: " + data.length());
                writeln();
                writeln(data);
                output.flush();
                input.close();
                output.close();
            } catch (IOException ex) {
                System.out.println("IO Error: " + ex);
            }
        //}
    }    

    private void writeln(String... lines) throws IOException {        
        if (lines.length == 0) {
            System.out.println("Writing:");
            output.write("\n");
        }

        for (String line : lines) {
            System.out.println("Writing: " + line);
            output.write(line + '\n');
        }
    }

    public void setStop(boolean stop) {
        this.stop = stop;
    }
}

连接实例是在另一个线程中创建的,它只是new Connection(serversocket.accept()).start();

在浏览器端,通过以下代码发送 AJAX 请求:

$(document).ready(function() {
    $.ajax({
        url: "http://192.168.1.212:4567",
        crossDomain: true,
        success: function(data) {
            console.log("Success: " + data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log("Text: " + xhr.responseText);
            console.log("Status: " + xhr.status);
            console.log("Error: " + thrownError);
      }
    });
});

浏览器是这么说的:

在此处输入图像描述

这就是服务器所说的:

GET / HTTP/1.1
Host: 192.168.1.212:4567
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.4) Gecko/20120425 Firefox/10.0.4
Accept: */*
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:8383/Client/index.html
Origin: http://localhost:8383

Writing: HTTP/1.1 200 OK
Writing: Content-Type: application/json; charset=utf-8
Writing: Content-Length: 18
Writing:
Writing: {"success": "yes"}

我知道有跨域请求,这是我项目中非常重要的一部分。所有标头都已发送,但没有响应数据。

4

1 回答 1

0

您粘贴为“服务器所说的内容”的内容是正常的浏览器请求,而不是响应。最小的响应如下所示:

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Date: Sun, 01 Mar 2012 00:00:00 GMT
Server: IAMME
Content-Length: 14444
Connection: Close 

some content here...

我还可以看到您没有发送任何状态(它是“0”).. 请参阅上面块的第一行。

于 2013-03-14T08:29:30.610 回答