用JSONP响应的简单Java HTTP服务器应用程序
我想用JSONP响应创建一个非常简单的HTTP服务器Java。用JSONP响应的简单Java HTTP服务器应用程序,java,jsonp,httpserver,cross-origin-read-blocking,Java,Jsonp,Httpserver,Cross Origin Read Blocking,我想用JSONP响应创建一个非常简单的HTTP服务器Java。 代码如下: public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8500), 0); HttpContext context = server.createContext("/test"); con
代码如下:
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8500), 0);
HttpContext context = server.createContext("/test");
context.setHandler(Sample::handleRequest);
server.start();
System.out.println("Server started on port 8500");
}
private static void handleRequest(HttpExchange exchange) throws IOException {
JSONObject json = new JSONObject("{\"weight\":\"23400\"}");
exchange.getResponseHeaders().add("Access-Control-Allow-Origin", "*");
exchange.getResponseHeaders().add("Access-Control-Allow-Headers","origin, content-type, accept, authorization");
exchange.getResponseHeaders().add("Access-Control-Allow-Credentials", "true");
exchange.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
exchange.getResponseHeaders().set("contentType", "application/json; charset=UTF-8");
exchange.sendResponseHeaders(200, json.toString().getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(json.toString().getBytes());
os.close();
}
客户:
$(document).ready(function () {
$.ajax({
url: 'http://localhost:8500/test/',
type: "GET",
dataType: "jsonp",
data: { no: 120 },
contentType: 'application/json',
success: function (data) {
$('#txtWeight').val(data);
},
error: function (err) {
console.log( err);
}
});
});
我遇到的问题与HTTP处理程序有关。Chrome返回:跨源读取阻塞(CORB)阻塞的跨源响应http://localhost:8500/test/?callback=jQuery34109210173679568667_1603222391566&no=120&_=1603222391567 使用MIME类型text/plain 您能看一下并告诉我是否有问题吗?您需要将标题中的“*”替换为您收到的“来源”。 问题与Chrome相关,与java无关
private static void handleRequest(final HttpExchange exchange) throws IOException {
final String json = "{\"weight\":\"23400\"}";
final String origin = exchange.getRequestHeaders().getFirst("Origin");
if(origin != null) exchange.getResponseHeaders().add("Access-Control-Allow-Origin", origin);
exchange.getResponseHeaders().add("Access-Control-Allow-Headers","origin, content-type, accept, authorization");
exchange.getResponseHeaders().add("Access-Control-Allow-Credentials", "true");
exchange.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
exchange.getResponseHeaders().set("contentType", "application/json; charset=UTF-8");
exchange.sendResponseHeaders(200, json.getBytes().length);
try(OutputStream os = exchange.getResponseBody()) {
os.write(json.getBytes());
os.flush();
}
exchange.close();
}
您需要将“*”替换为您在标题中收到的“来源”。
问题与Chrome相关,与java无关
private static void handleRequest(final HttpExchange exchange) throws IOException {
final String json = "{\"weight\":\"23400\"}";
final String origin = exchange.getRequestHeaders().getFirst("Origin");
if(origin != null) exchange.getResponseHeaders().add("Access-Control-Allow-Origin", origin);
exchange.getResponseHeaders().add("Access-Control-Allow-Headers","origin, content-type, accept, authorization");
exchange.getResponseHeaders().add("Access-Control-Allow-Credentials", "true");
exchange.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
exchange.getResponseHeaders().set("contentType", "application/json; charset=UTF-8");
exchange.sendResponseHeaders(200, json.getBytes().length);
try(OutputStream os = exchange.getResponseBody()) {
os.write(json.getBytes());
os.flush();
}
exchange.close();
}
不,我的意思是,在HTTP协议中,您会收到许多头字段。其中之一是“起源”。从交换中,您可以获得getRequestHeader,然后获得“Origin”头的值。已使用此值。您的意思是我必须是change
exchange.getResponseHeaders().add(“访问控制允许原点”)http://localhost:8500");代码>?抱歉,答案不起作用,Chrome返回:net::ERR\u EMPTY\u RESPONSEFix this。但是原来的问题已经用以下行解决了:exchange.getResponseHeaders().add(“访问控制允许源代码”),exchange.getRequestHeaders().getFirst(“源代码”);仍然不工作,exchange.getRequestHeaders().getFirst(“Origin”)
为空。不,我的意思是,在HTTP协议中,您会收到许多头字段。其中之一是“起源”。从交换中,您可以获得getRequestHeader,然后获得“Origin”头的值。已使用此值。您的意思是我必须是changeexchange.getResponseHeaders().add(“访问控制允许原点”)http://localhost:8500");代码>?抱歉,答案不起作用,Chrome返回:net::ERR\u EMPTY\u RESPONSEFix this。但是原来的问题已经用以下行解决了:exchange.getResponseHeaders().add(“访问控制允许源代码”),exchange.getRequestHeaders().getFirst(“源代码”);仍然不工作,exchange.getRequestHeaders().getFirst(“Origin”)
为空。