模拟 HTTP 请求

Simulating HTTP Request

我正在调用一个名为“http://localhost:32567?test=aaa”的 Java 应用程序,试图向连接的浏览器发送文本响应。我发送的回复就像

HTTP/1.1 200 OK
Content-Type: text/xml
Cache-Control: no-cache
Date: Thu Nov 02 15:56:26 NZDT 2017

<?xml version="1.0" ?><root><message>hello world</message><status>OK</status></root>

当我在浏览器中打开页面时,它工作正常,但是当我使用 AJAX 作为 Post 请求调用它时,返回的 HTTP 状态是 0?

这是浏览器中的代码运行

   var http_request = new XMLHttpRequest();
   http_request.overrideMimeType('text/xml');
   http_request.onreadystatechange = function() {
      alert(http_request.readyState + " " + http_request.status);
   };
   http_request.open('POST', "http://localhost:32567?test=aaa", true);
   http_request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
   http_request.send("");

我得到的回复是

1 0
2 0
4 0

我希望得到的地方

4 200

发送响应的Java测试代码如下

import java.io.*;
import java.net.*;

public class test {
    public test() throws Exception {
        ServerSocket ss = new ServerSocket(32567);

        Socket client = null;
        while ((client = ss.accept()) != null) {
           boolean sentOut = false;
           BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
           String output = "HTTP/1.1 200 OK\nContent-Type: text/xml\nCache-Control: no-cache\nDate: " + (new java.util.Date()) + "\n\n<?xml version=\"1.0\" ?><root><message>test</message><status>OK</status></root>\n";
           System.out.println("--------------------------\n" +  output);
           out.write(output);
           out.flush();
           out.close();
           client.close();
        }
    }

    public static void main(String args[]) throws Exception {
        new test();
    }
}

正如 Phil 所说,问题出在 CORS 上。在响应中添加 header Access-Control-Allow-Origin: *,浏览器就会受到威胁。