Не удается вызвать API, размещенный на моем компьютере, с другого устройства

# #api #apache #http #go

Вопрос:

У меня есть и работает API Golang:

 func main() {  app := fiber.New()   app.Get("/hello", func(c *fiber.Ctx) error {  log.Println("CALLED IT")  return nil  })   app.Listen("10.x.y.z:3000") }  

Мой index.html тоже в /var/www/html :

 lt;!DOCTYPE htmlgt; lt;htmlgt; lt;bodygt;   lt;h1gt;Call API on button clicklt;/h1gt;   lt;button type="submit" onclick="httpGet()"gt;CALL APIlt;/buttongt;  lt;scriptgt; function httpGet() {  var xmlHttp = new XMLHttpRequest();  xmlHttp.onreadystatechange = function() {   if (xmlHttp.readyState == 4 amp;amp; xmlHttp.status == 200)  callback(xmlHttp.responseText);  }  xmlHttp.open("GET", "http://10.x.y.z:3000/hello", true);  alert("Alert before finishing GET request");  xmlHttp.send(null); } lt;/scriptgt;  lt;/bodygt; lt;/htmlgt;  

10.x.y.z это IP-адрес моего компьютера, взятый из hostname -I результата. Есть также еще один IP- 172.a.b.c адрес , но я думаю, что мне следует использовать первый.

Когда я получаю доступ к своему index.html на том же компьютере, на котором размещен API, войдя localhost в браузер, нажав на CALL API кнопку, я могу успешно вызвать API. Я подтвердил это, увидев CALLED IT сообщение, напечатанное на терминале Go.

Но я не могу позвонить по этому телефону. Я вхожу 10.x.y.z в Safari, и index.html все отображается просто отлично. Нажатие на CALL API кнопку вызвало оповещение, но фактический API не вызывается. Я не видел никакого CALLED IT сообщения, напечатанного на терминале Go, при попытке вызвать API с моего телефона.

Я думаю, что это должно быть так для любого внешнего устройства. Как сделать так, чтобы это работало для любых устройств в разных сетях?

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

1. Известно ли устройству, которое осуществляет маршрутизацию с вашего телефона на ваше устройство, о 10.x.x.x сети?

2. Адреса частной сети не маршрутизируются через Интернет, поэтому вы не можете сделать свой адрес 10.x.x.x доступным в разных произвольных сетях

3. 10.0.0.0/8 недоступна через Интернет. Он должен быть доступен для любых устройств в одной локальной сети.