localhost – это «доменное имя» локального компьютера, к которому можно обратиться по такому адресу как 127.0.0.1, находясь на нём самом. 

127.0.0.1 и например 127.0.0.2 могут, но не обязаны, быть синонимичны.

IPv6-аналог адреса 127.0.0.1 выглядит как ::1 или [::1]
что является сокращением 
0:0:0:0:0:0:0:1

Ещё примеры IPv6 для локалхоста:
:: или 0:0:0:0:0:0:0:0
0:0:0:0:0:ffff:7f00:1

В IPv4 127.0.0.0/8 – это блок адресов от 127.0.0.1 до 127.255.255.254, зарезервизованных для обслуживания петли (loopback, интерфейс lo). 
Т.е. адрес 127.0.0.0  и маска подсети 111111110...0, первые 8 единиц
 что фактически означает что первый байт 127 а остальные любые
Пример в IPv6  ::1/128 (все единицы в маске, т.е. 1 адрес)


127.0.0.0 и 127.255.255.255 – адреса сети / широковещательные 


Чтобы создать другое «доменное имя» кроме localhost, мы оперируем файлом hosts. Такие решения как Denwer автоматизируют это, позволяя просто создавать определённые каталоги в файловой системе.




curl [::] curl [::1] curl '[0:0:0:0:0:0:0:0]' curl '[0:0:0:0:0:0:0:1]' curl '[0:0:0:0:0:ffff:7f00:1]' и curl localhost curl 127.0.0.1 делают одно и то же Для предварительной разработки бывает удобно запускать приложение на локальном сервере. Если мы просто дважды щёлкнем по html-странице, то она может открыться в браузере, и мы увидим в адресной строке схему протокола file:// – это позволяет посмотреть отдельные статические страницы, но для сколь-либо реалистичного поведения современного приложения нам необходимо, чтобы в браузере документы открывались по протоколу http, т.е. чтобы их браузеру выдавал веб-сервер. Мы можем написать простой веб-сервер сами, использовать Apache | NGINX | .. либо встроенный веб-сервер в популярные языковые экосистемы. Часто достаточно именно файлового сервинга, т.е. выдачи файлов, например, из текущей папки.

PHP

Команда php -S localhost:1234 запустит локальный сервер, обслуживающий текущую папку, который не доступен из внешней сети. Это не Apache и не NGINX, а собственный встроенный сервер. На вход этой команде можно подать PHP-сценарий с уточнением маршрутизации. Чтобы такой веб-сервер всё-таки был доступен (хотя это нужно делать только в целях проверки и конечно не в продакшн), вместо localhost нужно написать 0.0.0.0 или [::] т.е. например php -S [::]:1234 в ReactPHP тоже нужно явным образом открыть веб-сервер для внешнего мира: $socket = new React\Socket\Server('[::]:80', $loop); Это модель белого списка: по умолчанию разрешён минимум, чтобы расширить функциональность, нужно явно добавить в белый список интерфейс [::]
См. также Open Server, XAMPP, DenWer, локальные сервера операционных систем для шаринга файлов и доступа к принтерам (localhost:631/printers) или конфигурации (alterator/Sisyphus). Можно использовать ngrok, FRP или localtunnel для прокидывания локального сервера вовне

Node.js

по умолчанию веб-сервер открыт внешней среде, т.е. модель чёрного списка – нужно специально указывать, что необходимы ограничения т.е. чтобы node-сервер не был доступен внешнему миру, пишем
.listen(1234, '::1', () => { ... })
(не требуются квадратные скобки) Готовый встроенный девеломпент-сервер отсутствует (на июль 2019), поэтому можно использовать глобальные npm-пакеты serve, http-server или live-server. npm -g i static-server static-server -p 4321 по умолчанию только GET (405 Method Not Allowed) или npx serve . npx serve -p 80 --cors

Python

python3 -m http.server 1234 запускает веб-сервер на 0.0.0.0:1234 – т.е. модель чёрного списка; чтобы добавить ограничение его можно прибайндить к локалхосту python3 -m http.server --bind localhost 1234 Вариант: python -m SimpleHTTPServer 4321 по умолчанию только GET (501 Unsupported method) To start a SimpleHTTPServer with UTF-8 encoding, simply copy/paste the following in terminal.
python -c "import SimpleHTTPServer; m = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map; m[''] = 'text/plain'; m.update(dict([(k, v + ';charset=UTF-8') for k, v in m.items()])); SimpleHTTPServer.test();"
https://stackoverflow.com/questions/15288891/how-can-i-serve-files-with-utf-8-encoding-using-python-simplehttpserver

Ruby

ruby -run -e httpd . -p 1234 --bind localhost для закрытия внешнего доступа ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 1234, :DocumentRoot => Dir.pwd).start'
PHP-вариант в самом верху работает в стиле файлового сервера (например, Apache), т.е. отдаст содержимое независимо от того, каким методом посылается запрос. 
Серверы на Python и Ruby работают как REST API – т.е. откликаются на GET, т.к. это метод получения ресурса. При попытке обратиться к файлу в папке методом POST, получим, соответственно, 501 Unsupported method ('POST') и Method Not Allowed

https://gist.github.com/willurd/5720255