Серверный сокет Java и XMLHttpRequest JavaScript НЕ получают ответа

#javascript #java #sockets #xmlhttprequest #socketserver

#javascript #java #сокеты #xmlhttprequest #socketserver

Вопрос:

Я пытаюсь отправить HTTP-запрос из JS с помощью XMLHttpRequest и получить его на Java-сервере с помощью сокета.

Я могу отправить запрос, но проблема с ответом заключается в том, что я его не получаю.

 document.getElementById("Update").addEventListener("click", function() {
  var xhttp;
  var url = "http://192.168.43.1:8081/update";
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4) {
        alert(this.responseText);
        alert(this.status);
    }
};
 

Статус, который он возвращает, равен нулю.

Вот мой Java-код:

 try {
  String response = "";
  response = in.readLine();
  System.out.println(response);

  requestParser = response.split(" ");
  requestType = requestParser[0];
  pathFromClient = requestParser[1];
  http = requestParser[2];

  out.write("HTTP/1.1 200 OK");
  out.flush();
  socket.shutdownOutput();
  socket.close();
} catch (Exception e) {
  e.printStackTrace();
}
 

Комментарии:

1. необходимо отредактировать XHR open() , а затем вам нужно send() сделать это до фактического выполнения запроса — вы создали вызываемый var url … но это волшебным образом не открывается, потому что вы создали XHR сразу после него — могу я предложить краткое прочтение некоторой документации

2. То, что вы отправляете, не является допустимым HTTP-ответом. Пожалуйста, не переоценивайте, как работает HTTP, а вместо этого следуйте фактическому стандарту — есть причина, по которой существуют стандарты.

3. Как только вы разберетесь с вашим запросом и ответом, вам, вероятно, также потребуется понять CORS

Ответ №1:

Вы забыли некоторые биты. Возможно, я также забыл некоторые биты; Я не тестировал это, просто ввел его, но вы поняли идею.

 var url = "http://192.168.43.1:8081/update";
let xhttp = new XMLHttpRequest();
xhttp.open("GET", url);
xhttp.onreadystatechange = function() {
  if (this.readyState == 4 amp;amp; this.status == 200) {
    alert(this.responseText);
  }
}
xhttp.send(null);