簡體   English   中英

沒有數據從自己的HTTP服務器發送到瀏覽器

[英]No data sent from own HTTP server to browser

我創建了一個簡單的Java服務器,該服務器在端口4567上使用HTTP協議來接受連接,並且(至少現在)將硬編碼的響應發送到瀏覽器:

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"}

我知道存在跨域請求,這是我的項目中非常重要的一部分。 所有標頭均已發送,但沒有數據作為響應。

您粘貼為“服務器所說的內容”的是正常的瀏覽器請求,而不是響應。 最小的響應如下所示:

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”)。請參見上面代碼塊的第一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM