# #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 недоступна через Интернет. Он должен быть доступен для любых устройств в одной локальной сети.