我创建了简单的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"}
我知道有跨域请求,这是我项目中非常重要的一部分。 发送所有标头,但没有响应数据。
答案 0 :(得分: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”)..看到上面一行的第一行。